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

使用Python合并多份CSV表格,重复键对应字段内容追加而非生成重复行

实现方案

你现有代码出现重复条目是因为同一ID在子表存在多条记录时,join会生成笛卡尔积重复行,你可以先对每个数据表按ID分组合并同主键的多值后再关联,修改后的代码如下:

import pandas as pd

# 读取CSV并筛选所需字段
DF1 = pd.read_csv('facilities.csv', header=0, dtype=object)
DF2 = pd.read_csv('permits.csv', header=0, dtype=object)
DF3 = pd.read_csv('programs.csv', header=0, dtype=object)

DF1_reduc = DF1[['ID','FACILITY_TYPE_CODE','FACILITY_NAME','LOCATION_ADDRESS']]
DF2_reduc = DF2[['ID','ACTIVITY_ID','PERMIT_NAME','PERMIT_STATUS_CODE']]
DF3_reduc = DF3[['ID','PROG_CODE']]

# 同主键多值合并函数,默认用分号分隔多个值
def agg_same_id(df, sep=';'):
    return df.groupby('ID').agg(lambda col: sep.join(col.dropna().unique())).reset_index()

# 先对每个表按ID合并重复值
DF1_clean = agg_same_id(DF1_reduc)
DF2_clean = agg_same_id(DF2_reduc)
DF3_clean = agg_same_id(DF3_reduc)

# 关联处理后的表,不会生成重复条目
joined_result = DF1_clean.set_index('ID').join([DF2_clean.set_index('ID'), DF3_clean.set_index('ID')]).reset_index()

自定义调整说明

  • 若需要把多值存为列表而非拼接字符串,可将聚合逻辑改为 lambda col: col.dropna().unique().tolist()
  • 若不需要对同字段的重复值去重,删除 .unique() 即可
  • 可以自定义分隔符,比如改为逗号,、竖线|等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:01