如何使用Python的pandas库合并ID编号相同的数据行
使用pandas合并同ID行的实现方案
基础实现(适合内存可加载的CSV文件)
核心逻辑是按ID列分组,对每个分组下的其他列做聚合,自动跳过空值、拼接同列的有效值,代码如下:
import pandas as pd # 读取源CSV,指定ID列为字符串类型避免长ID精度丢失 df = pd.read_csv("你的源文件路径.csv", dtype={"ID": str}) # 分组聚合:同ID为一组,每列跳过空值,多个非重复有效值用逗号分隔 merged_result = df.groupby("ID", as_index=False).agg( lambda col: ",".join(col.dropna().astype(str).unique()) ) # 导出合并后的结果 merged_result.to_csv("合并后结果.csv", index=False, encoding="utf-8-sig")
参数说明
dtype={"ID": str}:如果你的ID是长数字格式(比如用户编号、订单号),必须加这个参数,否则pandas会把长数字转成科学计数法导致ID错乱col.dropna():自动过滤每列中的空值,不会把空内容拼入最终结果.unique():对同ID下同列的重复值去重,如果不需要去重直接删除该方法即可encoding="utf-8-sig":导出的CSV用Excel打开不会出现中文乱码
大文件适配方案(内存不足以一次性加载全量文件)
如果CSV体积过大,可以用分块读取的方式降低内存峰值:
import pandas as pd chunk_container = [] # 每次读取10万行,chunksize可根据本机内存大小调整 for chunk in pd.read_csv("你的源文件路径.csv", dtype={"ID": str}, chunksize=100000): chunk_container.append(chunk) # 拼接所有分块后执行分组聚合 full_df = pd.concat(chunk_container, ignore_index=True) merged_result = full_df.groupby("ID", as_index=False).agg( lambda col: ",".join(col.dropna().astype(str).unique()) ) merged_result.to_csv("合并后结果.csv", index=False, encoding="utf-8-sig")
如果分块读取后拼接仍然超出内存上限,可以替换为Dask库实现,它的语法和pandas高度兼容,支持并行计算和超出内存大小的文件处理,不需要改动核心聚合逻辑。
内容的提问来源于stack exchange,提问作者Rebekah Lee
相关产品推荐
相关产品推荐

