使用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
相关产品推荐
相关产品推荐

