如何使用pandas合并列值不同的重复行并整合全列数据
pandas多CSV合并去重整合方案
步骤1:批量读取所有CSV并合并为总表
import pandas as pd import glob # 替换为你存放CSV文件的文件夹路径 csv_path = "./csv_files/*.csv" csv_files = glob.glob(csv_path) # 合并所有CSV到同一个DataFrame df_all = pd.concat([pd.read_csv(f) for f in csv_files], ignore_index=True)
步骤2:按唯一标识分组合并重复行
首先确定你用来判定「同一记录」的唯一标识列,比如单主键用户id,或者组合主键姓名+身份证号,下面分场景给出方案:
场景1:同一记录的同列只有一个有效值,空值忽略,直接取首个非空值
# 单主键场景,把id换成你的实际主键列名 df_final = df_all.groupby("id", as_index=False).first() # 组合主键场景示例,按姓名+手机号判定同一记录 # df_final = df_all.groupby(["姓名", "手机号"], as_index=False).first()
场景2:同一记录的同列有多个有效值,需要全部保留拼接
df_final = df_all.groupby("id", as_index=False).agg( # 对所有列的非空唯一值用顿号拼接 lambda x: "、".join([str(i) for i in x.dropna().unique()]) )
场景3:不同列需要不同的聚合规则
比如数值类列求和/取最大值,文本类列拼接:
# 自定义每列的聚合规则 agg_config = { "消费总金额": "sum", "最近下单时间": "max", "收货地址": lambda x: "、".join(x.dropna().unique()) } df_final = df_all.groupby(["姓名", "手机号"], as_index=False).agg(agg_config)
步骤3:导出结果
df_final.to_csv("合并完成结果.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者Dis_Delros
相关产品推荐
相关产品推荐

