如何使用pandas合成表格,实现相同姓名条目去重并关联全部对应信息

pandas 操作实现方案
以下两种常见场景的处理代码,你可以根据自己的表格结构调整使用:
场景1:单表内John条目重复,需合并全部关联信息
- 导入pandas并读取你的表格数据
import pandas as pd # 替换为你的表格文件路径,csv格式用read_csv读取 df = pd.read_excel("你的表格文件路径.xlsx")
- 对John条目做聚合去重,同时保留全部关联信息
# 替换代码中的「姓名列名」为你表格里存姓名的列实际名称 # 同字段多值默认用分号拼接,你可以自行调整分隔符 john_agg = df[df["姓名列名"] == "John"].groupby("姓名列名", as_index=False).agg( lambda x: ";".join(x.dropna().unique().astype(str)) ) # 保留其余非John的原始行,合并得到最终结果 other_rows = df[df["姓名列名"] != "John"] final_result = pd.concat([other_rows, john_agg], ignore_index=True)
场景2:多表关联后John仅保留唯一行
假设你有两张表:基础信息表df_base存姓名等基础属性,详情表df_detail存John的多条关联详情:
- 先聚合详情表的同姓名数据再关联
detail_agg = df_detail.groupby("姓名列名", as_index=False).agg( lambda x: ";".join(x.dropna().unique().astype(str)) ) # 关联两张表,得到每个姓名仅一行的全量信息 final_result = pd.merge(df_base, detail_agg, on="姓名列名", how="left")
聚合逻辑可灵活调整:如果要取同字段的最新值就把
lambda那段替换为"last",要取数值总和就替换为"sum",要取第一个出现的值就替换为"first"。
处理完成后可以用final_result.to_excel("处理结果.xlsx", index=False)导出为本地文件。
内容的提问来源于stack exchange,提问作者Allp Raplsf
相关产品推荐
相关产品推荐

