我相信您需要通过GroupBy.agg 聚合,然后在列中展平MultiIndex 并通过DataFrame.reset_index 将索引转换为列:
print (df)
uuid diesel e5 \
datetime
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 15 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 9 4
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 19 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 12 9
e10
datetime
2018-01-31 00:01:06+01:00 4
2018-01-31 00:03:06+01:00 1
2018-01-31 00:01:06+01:00 5
2018-01-31 00:03:06+01:00 12
df['date'] = df.index.date
cols = ['diesel','e5','e10']
df1 = df.groupby(['uuid','date'])[cols].agg([('low', 'min'),('high', 'max')])
df1.columns = df1.columns.map('_'.join)
print (df1)
diesel_low diesel_high \
uuid date
6dc575da-3c85-430c-a17a-6efdae0dcf5a 2018-01-31 9 12
c03c846e-64ec-437f-9a52-9eda8088c4b2 2018-01-31 15 19
e5_low e5_high e10_low \
uuid date
6dc575da-3c85-430c-a17a-6efdae0dcf5a 2018-01-31 4 9 1
c03c846e-64ec-437f-9a52-9eda8088c4b2 2018-01-31 1 1 4
e10_high
uuid date
6dc575da-3c85-430c-a17a-6efdae0dcf5a 2018-01-31 12
c03c846e-64ec-437f-9a52-9eda8088c4b2 2018-01-31 5
df = df.join(df1, on=['uuid','date'])
print (df)
uuid diesel e5 \
datetime
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 15 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 9 4
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 19 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 12 9
e10 date diesel_low diesel_high e5_low \
datetime
2018-01-31 00:01:06+01:00 4 2018-01-31 15 19 1
2018-01-31 00:03:06+01:00 1 2018-01-31 9 12 4
2018-01-31 00:01:06+01:00 5 2018-01-31 15 19 1
2018-01-31 00:03:06+01:00 12 2018-01-31 9 12 4
e5_high e10_low e10_high
datetime
2018-01-31 00:01:06+01:00 1 4 5
2018-01-31 00:03:06+01:00 9 1 12
2018-01-31 00:01:06+01:00 1 4 5
2018-01-31 00:03:06+01:00 9 1 12
另一种解决方案:
df['date'] = df.index.date
cols = ['diesel','e5','e10']
df1 = df.groupby(['uuid','date'])[cols].transform('max').add_suffix('_high')
df2 = df.groupby(['uuid','date'])[cols].transform('min').add_suffix('_low')
df = pd.concat([df, df1, df2], axis=1)
print (df)
uuid diesel e5 \
datetime
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 15 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 9 4
2018-01-31 00:01:06+01:00 c03c846e-64ec-437f-9a52-9eda8088c4b2 19 1
2018-01-31 00:03:06+01:00 6dc575da-3c85-430c-a17a-6efdae0dcf5a 12 9
e10 date diesel_high e5_high e10_high \
datetime
2018-01-31 00:01:06+01:00 4 2018-01-31 19 1 5
2018-01-31 00:03:06+01:00 1 2018-01-31 12 9 12
2018-01-31 00:01:06+01:00 5 2018-01-31 19 1 5
2018-01-31 00:03:06+01:00 12 2018-01-31 12 9 12
diesel_low e5_low e10_low
datetime
2018-01-31 00:01:06+01:00 15 1 4
2018-01-31 00:03:06+01:00 9 4 1
2018-01-31 00:01:06+01:00 15 1 4
2018-01-31 00:03:06+01:00 9 4 1