如何合并存在无匹配与多匹配情况的两个Pandas DataFrame
解决方案:高效合并Pandas DataFrame并处理多匹配场景
核心思路
采用Pandas分组聚合+左连接的矢量化操作方案,全程避免逐行循环,适配大数据集的高效处理需求。具体逻辑:
- 对df2按
B列分组,将每组的C值拼接为逗号分隔的字符串 - 将聚合结果与df1左连接,确保df1的所有行完整保留
- 为无匹配的行填充
C列为"0" - 导出带
C列的df1副本到Excel
代码实现
import pandas as pd # 假设已从Excel导入df1和df2(示例数据) df1 = pd.DataFrame({ 'A': ['XY', 'ZA', 'BD', 'EF', 'GH'], 'B': ['123', '456', '789', '001', '555'] # 统一为字符串类型,避免类型不匹配导致的匹配失败 }) df2 = pd.DataFrame({ 'B': ['123', '456', '789', '456', '555', '456', '123'], 'C': [1000, 200, 50, 75, 90, 100, 2000] }) # 1. 对df2按B分组,拼接C值为逗号+空格分隔的字符串 df2_agg = df2.groupby('B')['C'].apply(lambda x: ', '.join(x.astype(str))).reset_index() # 2. 左连接df1与聚合后的df2 result = df1.merge(df2_agg, on='B', how='left') # 3. 填充无匹配的C列为"0" result['C'] = result['C'].fillna('0') # 4. 导出合并结果到Excel(保留原df1,仅导出副本) result.to_excel('合并结果.xlsx', index=False)
关键细节说明
- 类型统一:必须确保df1和df2的
B列数据类型一致(比如都转为字符串),否则会出现整数与字符串无法匹配的问题 - 高效性:
groupby和merge都是Pandas底层优化的矢量化操作,处理百万级数据的效率远高于逐行循环判断 - 格式适配:用
', '.join()保证拼接后的字符串与示例格式完全对齐
运行结果
执行后得到的result如下(与需求一致,示例中ZA行的C值差异为示例数据笔误,代码会保留所有匹配项):
A B C 0 XY 123 1000, 2000 1 ZA 456 200, 75, 100 2 BD 789 50 3 EF 001 0 4 GH 555 90
内容的提问来源于stack exchange,提问作者Thenelly
相关产品推荐
相关产品推荐

