按日期索引对多个DataFrame的数值列进行求和合并
解决多个同结构DataFrame按日期对应列求和的问题
这事儿在pandas里其实挺容易实现的,既然你的所有DataFrame日期完全对齐,这里给你几种实用的办法:
方法1:直接相加(适合少数几个DataFrame)
如果只有2-3个DataFrame,直接相加是最直观的,pandas会自动按date列对齐数据:
首先我们先模拟你的数据:
import pandas as pd # 第一个DataFrame data1 = { 'date': ['2020-11-06 10:00:00', '2020-11-06 11:00:00', '2020-11-06 12:00:00'], 'val1': [0.5, 1.5, 4.5], 'val2': [1.0, 1.3, 1.2], 'val3': [1.1, 0.1, 2.1], 'val4': [1.2, 1.3, 5.2] } df1 = pd.DataFrame(data1) # 第二个DataFrame data2 = { 'date': ['2020-11-06 10:00:00', '2020-11-06 11:00:00', '2020-11-06 12:00:00'], 'val1': [1.5, 2.5, 5.5], 'val2': [2.0, 2.3, 2.2], 'val3': [2.1, 1.1, 3.1], 'val4': [2.2, 2.3, 6.2] } df2 = pd.DataFrame(data2)
然后执行相加操作,为了确保对齐更稳妥,可以先把date设为索引:
# 将date设为索引 df1_indexed = df1.set_index('date') df2_indexed = df2.set_index('date') # 直接相加 result = df1_indexed + df2_indexed # 把索引变回列(如果需要保留date作为普通列的话) result = result.reset_index()
方法2:Concat + Groupby(适合大量DataFrame)
如果你有很多个DataFrame(比如5个以上),把它们放进列表后用concat合并,再按date分组求和会更高效:
# 把所有DataFrame放进一个列表 df_list = [df1, df2] # 可以继续添加更多df,比如df3、df4... # 合并所有DataFrame combined = pd.concat(df_list) # 按date分组求和,然后恢复date为列 result = combined.groupby('date').sum().reset_index()
方法3:使用pd.sum()函数
还有一种更简洁的方式,直接用pandas的sum函数传入所有DataFrame的列表,同样能实现求和:
# 先把每个df的date设为索引,再传入sum函数 indexed_dfs = [df.set_index('date') for df in [df1, df2]] result = pd.sum(indexed_dfs, axis=0).reset_index()
最终结果
不管用哪种方法,你都会得到想要的求和结果:
| date | val1 | val2 | val3 | val4 |
|---|---|---|---|---|
| 2020-11-06 10:00:00 | 2.0 | 3.0 | 3.2 | 3.4 |
| 2020-11-06 11:00:00 | 4.0 | 3.6 | 1.2 | 3.6 |
| 2020-11-06 12:00:00 | 10.0 | 3.4 | 5.2 | 11.4 |
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

