Pandas合并同结构DataFrame后排序,DF2行未在对应日期末尾如何解决
问题原因
你仅按date字段排序的逻辑没有区分同日期下DF和DF2的行优先级,排序时同日期的行顺序不满足你要的「DF行在前、DF2行在后」的规则,因此输出不符合预期。
解决方案
最简单稳妥的方案是增加一个临时排序辅助列,标记行的来源优先级,排序后再删除该列即可:
# 标记DF的行排序优先级更高 DF['sort_flag'] = 0 DF2['sort_flag'] = 1 # 拼接后先按日期排序,同日期下按优先级排序,最后删除辅助列 result = pd.concat([DF, DF2])\ .sort_values(by=['date', 'sort_flag'])\ .drop(columns='sort_flag')\ .reset_index(drop=True)
如果不想加辅助列,也可以用分组拼接的方式实现:
result = DF.groupby('date', group_keys=False)\ .apply(lambda group: pd.concat([group, DF2.query(f"date == '{group.name}'")]))\ .reset_index(drop=True)
第一种方案在数据量较大时运行效率更高,更推荐使用。
内容的提问来源于stack exchange,提问作者sdom
相关产品推荐
相关产品推荐

