我有以下数据框,其中包含我家中按小时划分的设备用电量。
DateTime Name kWh
0 1/31/2024 18:00 Sump Pump 0.003
1 1/31/2024 18:00 Furnace 2 0.027
2 1/31/2024 18:00 Furnace 1 0.211
3 1/31/2024 18:00 Dryer 0.302
4 1/31/2024 18:00 Total Usage 1.927
5 1/31/2024 18:00 Always On 0.811
6 1/31/2024 18:00 Heat 7 0.003
7 1/31/2024 18:00 Fridge 0.030
8 1/31/2024 18:00 Pump 0.069
9 1/31/2024 19:00 Sump Pump 0.002
10 1/31/2024 19:00 Total Usage 1.593
11 1/31/2024 19:00 Always On 0.828
12 1/31/2024 19:00 Heat 7 0.001
13 1/31/2024 19:00 Fridge 0.02
14 1/31/2024 19:00 Pump 0.070
我想每小时添加一行,其中名称 =“其他”且 kWh 等于(“总使用量”kWh - 该小时所有其他行的 kWh 总和),因此生成的数据框如下。每小时的名称、顺序和行数都会有所不同。 (请注意,我添加了 2 行,其中 Name =“Other”。
DateTime Name kWh
0 1/31/2024 18:00 Sump Pump 0.003
1 1/31/2024 18:00 Furnace 2 0.027
2 1/31/2024 18:00 Furnace 1 0.211
3 1/31/2024 18:00 Dryer 0.302
4 1/31/2024 18:00 Total Usage 1.927
5 1/31/2024 18:00 Always On 0.811
6 1/31/2024 18:00 Heat 7 0.003
7 1/31/2024 18:00 Fridge 0.030
8 1/31/2024 18:00 Pump 0.069
9 1/31/2024 18:00 Other 0.471
10 1/31/2024 19:00 Sump Pump 0.002
11 1/31/2024 19:00 Total Usage 1.593
12 1/31/2024 19:00 Always On 0.828
13 1/31/2024 19:00 Heat 7 0.001
14 1/31/2024 19:00 Fridge 0.02
15 1/31/2024 19:00 Pump 0.070
16 1/31/2024 19:00 Other 0.672
预先感谢您的帮助!
您可以按时分组,并对每组的千瓦时进行求和;基本方法如下面的简化代码所示:
import pandas as pd
df = pd.DataFrame({'time': [18, 18, 19, 19],
'Name' : ['a', 'z', 'a', 'z'],
'kWh': [1.2, 3.2, 4.2, 5.1]
})
df2 = df.groupby('time', as_index = False)['kWh'].sum()
df3 = pd.concat([df, df2]).fillna('Other').sort_values('time').reset_index(drop = True)
print(df3)
给出:
time Name kWh
0 18 a 1.2
1 18 z 3.2
2 18 Other 4.4
3 19 a 4.2
4 19 z 5.1
5 19 Other 9.3