如何合并大dataframe与小dataframe,保留小表全量且无重复qtr_dates
Pandas合并两个同结构DataFrame出现重复日期的解决方法
问题原因
你使用全字段outer merge出现重复qtr_dates的核心原因是:outer merge只有在两个表的所有匹配字段(此处为qtr_dates和sales)完全相等时才会合并为同一行,只要同一个qtr_dates在两个表中的sales数值存在差异,就会生成两行同日期的记录,不符合你「小表行优先级更高,同日期只保留小表记录」的需求。
解决方案
根据你的具体场景可以选择两种实现方式:
方式1:保留小表所有日期(含大表不存在的日期)
先拼接两个表(小表在前保证优先级),再按日期去重保留第一条记录即可:
import pandas as pd # 小表放concat的前位,去重时同日期优先保留小表记录 df = pd.concat([small_df, big_df]).drop_duplicates(subset="qtr_dates", keep="first").reset_index(drop=True)
方式2:最终日期范围和大表完全一致(仅用小表数值覆盖同日期记录)
如果要求最终的qtr_dates和大表完全对齐,不需要保留大表不存在的小表日期,可以用update方法直接覆盖:
# 把日期设为索引方便对齐 big_df_idx = big_df.set_index("qtr_dates") small_df_idx = small_df.set_index("qtr_dates") # 用小表数值覆盖大表的同索引记录,无匹配的保留大表原值 big_df_idx.update(small_df_idx) # 重置索引回普通列 df = big_df_idx.reset_index()
两种方式都不会出现重复的qtr_dates记录,完全符合你优先保留小表全量行、缺省部分从大表补充的需求。
内容的提问来源于stack exchange,提问作者Anirban Nag 'tintinmj'
相关产品推荐
相关产品推荐

