如何基于使用给定日期时间的所有行的计算向 Pandas 数据框添加新行?

问题描述 投票:0回答:1

我有以下数据框,其中包含我家中按小时划分的设备用电量。

             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

预先感谢您的帮助!

python python-3.x dataframe row
1个回答
0
投票

您可以按时分组,并对每组的千瓦时进行求和;基本方法如下面的简化代码所示:

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
© www.soinside.com 2019 - 2024. All rights reserved.