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

Pandas合并三个客户数据集并按字段匹配去重的问题

拼接逻辑错误原因
  • pd.concat([df2,df1,df3], axis=1)是按行索引对齐的横向硬拼接,完全不会识别三个数据集里的客户对应关系,直接把三个表同一行号的内容拼在一起,会出现客户和Age、Exposures字段完全错位的问题,不符合你按客户ID关联的需求。
  • 三个表的客户主键字段名不统一:dataset2的主键是Customer,dataset1、dataset3的客户字段是Customer1、Customer2,concat不会处理字段名差异做关联匹配,自然无法拿到对应客户的Age字段。
  • concat本身不具备按指定字段去重合并客户的能力,只会把所有行的内容直接堆叠,无法得到你要的无重复客户结果。
正确实现方案

步骤1:合并dataset1、dataset3并去重

两个表结构完全一致,先纵向拼接后按Customer1、Customer2去重:

# 纵向合并df1和df3的所有行
df_13_raw = pd.concat([df1, df3], axis=0, ignore_index=True)
# 按Customer1、Customer2组合去重,保留第一条出现的记录
df_13_unique = df_13_raw.drop_duplicates(subset=['Customer1', 'Customer2'], keep='first')

步骤2:关联dataset2的Age字段

根据你的需求选择匹配逻辑:

仅给Customer1匹配Age(Exposures对应Customer1的场景)

result = df_13_unique.merge(
    df2,
    left_on='Customer1', # df1、df3中Customer1的字段名
    right_on='Customer', # df2中客户ID的字段名
    how='left' # 保留df1+df3的所有客户,匹配不到的Age返回空值
)
# 可选:删除重复的Customer字段
result = result.drop(columns=['Customer'])

同时给Customer1、Customer2都匹配Age

# 先匹配Customer1的Age,重命名避免冲突
result = df_13_unique.merge(
    df2,
    left_on='Customer1',
    right_on='Customer',
    how='left'
).rename(columns={'Age': 'Age_Customer1'}).drop(columns=['Customer'])

# 再匹配Customer2的Age
result = result.merge(
    df2,
    left_on='Customer2',
    right_on='Customer',
    how='left'
).rename(columns={'Age': 'Age_Customer2'}).drop(columns=['Customer'])

内容的提问来源于stack exchange,提问作者LdM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:45:03