我计算了一个电能表的每小时和每天的数据,累计记录的能耗如下:
<表类>
设备
时间
千瓦时
tbody><<tr>计1 2022年5月12日21:05:00 900 计1 2022年5月12日21:20:00 930 计1 2022年5月12日21:55:00 950 计1 2022年5月12日22:05:00 1000 计1 2022年5月12日22:55:00 1050 计1 2022年5月13日00:05:00 1200 表类>
想法是将Device
和Grouper
的小时/天与GroupBy.first
和GroupBy.last
相加,得到Device
的差值,并将第一个值减去最后一个值和第一个值:
df['Time'] = pd.to_datetime(df['Time'])
df1 = df.groupby(['Device', pd.Grouper(freq='H', key='Time')])['kWH'].agg(['first','last'])
df1 = df1.groupby(level=0)['last'].diff().fillna(df1['last'].sub(df1['first'])).reset_index(name='hour diff')
print (df1)
Device Time hour diff
0 Meter 1 2022-05-12 21:00:00 50.0
1 Meter 1 2022-05-12 22:00:00 100.0
2 Meter 1 2022-05-13 00:00:00 150.0
df2 = df.groupby(['Device', pd.Grouper(freq='D', key='Time')])['kWH'].agg(['first','last'])
df2 = df2.groupby(level=0)['last'].diff().fillna(df2['last'].sub(df2['first'])).reset_index(name='day diff')
print (df2)
Device Time day diff
0 Meter 1 2022-05-12 150.0
1 Meter 1 2022-05-13 150.0