如何在Pandas中合并不同长度的DataFrame并求和对应列?
按name列汇总多个DataFrame的数值列求和实现
示例数据构造
先构造你给出的两个DataFrame:
import pandas as pd df1 = pd.DataFrame({'name': ['a', 'b', 'c'], 'value': [3, 4, 5]}) df2 = pd.DataFrame({'name': ['b', 'a'], 'value': [2, 1]})
方法一:concat + groupby(推荐,支持多DataFrame扩展)
这种方法适合合并任意数量的DataFrame,自动对所有数值列按name分组求和:
# 合并所有目标DataFrame,按name分组并求和,保留name为普通列 result = pd.concat([df1, df2]).groupby('name', as_index=False).sum()
执行后得到的结果:
name value 0 a 4 1 b 6 2 c 5
如果存在多个数值列(比如value1、value2),该方法会自动对所有数值列分别求和,无需额外修改代码。
方法二:merge + 逐列相加(适合两个DataFrame场景)
通过左连接保留所有df1中的name,填充缺失值为0后对应列相加:
# 按name左连接两个DataFrame,添加后缀区分同名列 merged = df1.merge(df2, on='name', how='left', suffixes=('_df1', '_df2')) # 计算value列的和,缺失值用0填充 merged['value'] = merged['value_df1'].fillna(0) + merged['value_df2'].fillna(0) # 提取需要的列 result = merged[['name', 'value']]
若有多个数值列,可通过循环批量处理:
# 假设存在value1、value2两个数值列 for col in ['value1', 'value2']: merged[col] = merged[f'{col}_df1'].fillna(0) + merged[f'{col}_df2'].fillna(0) result = merged[['name', 'value1', 'value2']]
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

