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

Pandas按concat_python左合并DataFrame遇行数膨胀、列重复问题求助

解决DataFrame合并行数膨胀&列重复问题

问题原因

  1. 行数暴增:你的concat_python列在两个DataFrame里不是唯一值,left join时每个匹配的重复ID会生成笛卡尔积,导致行数剧增。
  2. 列重复带后缀:两个DataFrame存在同名列(除了concat_python),merge时自动添加_x/_y区分。

分步解决方案

1. 先清理重复的唯一标识

首先检查并去除concat_python的重复值,确保每个ID只对应一行:

# 查看重复数量
print("main_file重复ID数:", main_file['concat_python'].duplicated().sum())
print("new_file重复ID数:", new_file['concat_python'].duplicated().sum())

# 去重,保留每个ID的第一行(根据需求可改keep='last'或自定义聚合)
main_file = main_file.drop_duplicates(subset='concat_python', keep='first')
new_file = new_file.drop_duplicates(subset='concat_python', keep='first')

2. 合并时只保留需要补充的列

过滤new_file,只保留main_file没有的列,避免列重复:

# 筛选new_file中main_file没有的列(排除合并键)
supplement_cols = [col for col in new_file.columns if col not in main_file.columns]
new_file_supplement = new_file[['concat_python'] + supplement_cols]

3. 合并并补充新行

有两种简洁的实现方式:

方式一:merge + concat(直观可控)
# 先合并补充列到main_file
merged = main_file.merge(new_file_supplement, on='concat_python', how='left')
# 提取new_file中独有的ID行,补充到结果里
new_unique_rows = new_file[~new_file['concat_python'].isin(main_file['concat_python'])]
final_df = pd.concat([merged, new_unique_rows], ignore_index=True)
方式二:combine_first(更简洁的原生方法)

这个方法直接以main_file为基础,自动填充缺失值、补充新列和新行,无需手动处理列重复:

# 先将合并键设为索引
main_file_idx = main_file.set_index('concat_python')
new_file_idx = new_file.set_index('concat_python')
# 执行合并,自动补充内容
final_df = main_file_idx.combine_first(new_file_idx).reset_index()

验证结果

合并后可以检查行数和列数:

print("最终行数:", len(final_df))
print("最终列数:", len(final_df.columns))
# 确认没有重复ID
print("最终重复ID数:", final_df['concat_python'].duplicated().sum())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:48:20