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 行相加,只有一种按小时测量的方法可以得到有效的每小时千瓦数。
如何对数据框中的每两行求和?
假设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)