Python数据帧每2行求和

Ben*_*Boy 1 python sum dataframe pandas

我有 2 个数据框,一个的步长为 30 分钟,另一个的步长为 1 小时。

我想比较 2 个数据帧,第一个(频率 30 分钟)以每小时千瓦为单位,但在 2 条 30 分钟的线上。

像这样 :

2021-05-01 03:00:00, 0.701
2021-05-01 03:30:00, 1.556
2021-05-01 04:00:00, 0.799
2021-05-01 04:30:00, 0.738
Run Code Online (Sandbox Code Playgroud)

但在现实生活中,这应该具有以下形式:

2021-05-01 03:00:00, 2.347
2021-05-01 04:00:00, 1.537
Run Code Online (Sandbox Code Playgroud)

第 1 行和第 2 行相加,第 3 行和第 4 行相加,只有一种按小时测量的方法可以得到有效的每小时千瓦数。

如何对数据框中的每两行求和?

moz*_*way 5

假设date和value列名称。

按位置聚合:

out = df.groupby(df.index//2).agg({'date': 'first', 'value': 'sum'})
Run Code Online (Sandbox Code Playgroud)

每小时聚合:

df['date'] = pd.to_datetime(df['date'])
out = (df.groupby(df['date'].dt.floor('h'), as_index=False)
         .agg({'date': 'first', 'value': 'sum'})
       )
Run Code Online (Sandbox Code Playgroud)

输出:

                 date  value
0 2021-05-01 03:00:00  2.257
1 2021-05-01 04:00:00  1.537
Run Code Online (Sandbox Code Playgroud)

使用的输入:

                 date  value
0 2021-05-01 03:00:00  0.701
1 2021-05-01 03:30:00  1.556
2 2021-05-01 04:00:00  0.799
3 2021-05-01 04:30:00  0.738
Run Code Online (Sandbox Code Playgroud)

日期作为索引:

df.index = pd.to_datetime(df.index)
out = df.groupby(df.index.floor('h')).sum().reset_index()
Run Code Online (Sandbox Code Playgroud)

或者:

df.index = pd.to_datetime(df.index)
out = (df
 .assign(date=df.index).groupby(df.index.floor('h'), as_index=False)
 .agg({'date': 'first', 'value': 'sum'})
)
Run Code Online (Sandbox Code Playgroud)