You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并存在无匹配与多匹配情况的两个Pandas DataFrame

解决方案:高效合并Pandas DataFrame并处理多匹配场景

核心思路

采用Pandas分组聚合+左连接的矢量化操作方案,全程避免逐行循环,适配大数据集的高效处理需求。具体逻辑:

  1. 对df2按B列分组,将每组的C值拼接为逗号分隔的字符串
  2. 将聚合结果与df1左连接,确保df1的所有行完整保留
  3. 为无匹配的行填充C列为"0"
  4. 导出带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:58:11