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

如何在Pandas中合并DataFrame并替换指定年份重复数据?

解决DataFrame合并时的重复覆盖问题

这个需求的核心是让df2的2019年数据完全覆盖df1中同类型、同年份的记录,同时保留df1里其他年份的数据,以及df2中独有的类型(比如示例里的d)。我给你两种实用的解决方案:

方法一:提前过滤+合并(高效直接)

先把df1里2019年的记录全部过滤掉,再和完整的df2合并,从根源上避免重复:

import pandas as pd

# 过滤df1,只保留非2019年的数据
df1_filtered = df1[df1['year'] != 2019]
# 合并过滤后的df1和df2,重置索引
final_df = pd.concat([df1_filtered, df2], ignore_index=True, sort=False)

运行后得到的final_df完全符合你的预期:

typeyearvalue
0a201512
1a20162
2b201850
3c20171
4c20165
5a201913
6b20195
7c20195
8d201920

方法二:合并后去重(灵活通用)

如果以后需要覆盖的年份不止2019,或者不想提前写过滤规则,可以先合并两个DataFrame,再通过去重逻辑保留优先级更高的记录(把df2放在concat的后面,用keep='last'确保df2的记录覆盖df1):

# 合并两个DataFrame(暂时保留原顺序)
combined_df = pd.concat([df1, df2], ignore_index=False)
# 按type和year去重,保留最后出现的记录(即df2的对应记录)
final_df = combined_df.drop_duplicates(subset=['type', 'year'], keep='last').reset_index(drop=True)

两种方法对比

  • 方法一更高效:减少了合并的数据量,适合处理大规模数据集;
  • 方法二更灵活:不需要针对特定年份写过滤条件,只要保证优先级高的DataFrame在concat时放在后面即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:34