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

如何堆叠列数不同的两个Pandas DataFrame且优先保留第二个表的重复观测行

解决方案

你可以通过concat拼接+按公共键去重的方式实现需求,全程使用Pandas原生接口,逻辑简洁效率也高:

  1. 先定义两张表的公共匹配列
common_cols = ['id', 'month', 'year', 'purchase', 'category']
  1. 按优先保留表在前的顺序拼接两个DataFrame:把需要优先保留的第二个表放在concat的第一个参数位置,这样重复行拼接后第二个表的行排在前面
import pandas as pd
combined = pd.concat([df2, df1], ignore_index=True)
  1. 按公共列去重,默认保留第一个出现的行,也就是优先保留第二个表的对应行
result = combined.drop_duplicates(subset=common_cols, keep='first')

逻辑说明

  • 拼接时第二个表在前,重复的匹配行在拼接结果里第二个表的行顺序更靠前
  • drop_duplicates指定subset为5个公共列,只要这5列值完全一致就判定为重复行,keep='first'会保留顺序靠前的第二个表的行,自动删除排在后面的第一个表的重复行
  • 第一个表里独有的行不会被删除,第二个表多出来的列会自动用NaN填充,完全符合你给出的预期输出格式

可选优化

如果两个表各自内部就存在公共列重复的行,可以先分别做去重再拼接,避免内部重复影响结果:

df1_clean = df1.drop_duplicates(subset=common_cols, keep='first')
df2_clean = df2.drop_duplicates(subset=common_cols, keep='first')
combined = pd.concat([df2_clean, df1_clean], ignore_index=True)
result = combined.drop_duplicates(subset=common_cols, keep='first')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:04