基于col1和col2合并两个DataFrame并对多列求和遇重复问题
解决DataFrame按多列分组求和出现重复项的问题
你遇到的重复分组问题,核心原因是用于分组的col1/col2列存在隐形差异,比如:
col1字符串前后有空格(比如df1里是"aaa ",df2里是"aaa")col2数据类型不一致(比如一个是字符串"2020",一个是数字2020)- 大小写不一致(比如
"AAA"和"aaa")
解决步骤:
1. 先清洗数据,消除隐形差异
# 处理df1:去除字符串列空格、统一类型 df1['col1'] = df1['col1'].str.strip() df1['col2'] = df1['col2'].astype(int) # 处理df2:同样操作 df2['col1'] = df2['col1'].str.strip() df2['col2'] = df2['col2'].astype(int)
2. 重新执行分组求和
df = pd.concat([df1, df2]).groupby(['col1', 'col2'], as_index=False).sum()
执行后就能得到预期结果:
col1 col2 col3 col4 col5 0 aaa 2020 14.6 7.6 12.7 1 bbb 2019 4.5 10.4 17.6 2 ccc 2020 9.2 10.1 7.7
备选方案:直接合并后逐列求和
如果确定两个DataFrame的col1+col2组合完全匹配,也可以用merge的方式直接相加,更直观:
# 按分组键合并两个df,区分来自不同df的列 merged_df = pd.merge(df1, df2, on=['col1', 'col2'], suffixes=('_df1', '_df2')) # 对目标列求和 for col in ['col3', 'col4', 'col5']: merged_df[col] = merged_df[f'{col}_df1'] + merged_df[f'{col}_df2'] # 提取最终结果列 result_df = merged_df[['col1', 'col2', 'col3', 'col4', 'col5']]
这个方法的优势是:如果存在不匹配的分组键,会直接显示NaN,方便快速排查数据问题。
内容的提问来源于stack exchange,提问作者anagha s
相关产品推荐
相关产品推荐

