如何合并两个pandas DataFrame并按公共时间列完成排序
最优实现方案
你可以直接通过pandas.concat做纵向全量合并,再按时间列排序即可,注意提前确认时间列的格式为datetime类型避免排序出错,完整代码如下:
import pandas as pd # 1. 纵向合并两张表的全量数据,ignore_index重置索引避免原表索引重复 combined_df = pd.concat([df1, df2], ignore_index=True) # 可选步骤:如果时间列存储为字符串格式,先转换为datetime类型保证排序逻辑正确,替换为实际的时间列名 combined_df['你的时间列名'] = pd.to_datetime(combined_df['你的时间列名']) # 2. 按时间列升序排序,如需降序可修改ascending参数为False combined_df.sort_values(by='你的时间列名', ascending=True, ignore_index=True, inplace=True)
该方案是最优选择的原因如下:
pd.concat是pandas官方原生提供的多表纵向合并方法,性能远高于循环追加、append(append方法已在pandas 2.0及以上版本废弃)等实现- 排序时携带
ignore_index=True参数,可在排序完成后直接重置行索引,无需额外调用reset_index(),减少冗余步骤 - 通用适配所有场景,不需要两张表预先做任何预处理
如果已经确认两张表各自都已经按时间列完成升序排序,还可以使用性能更优的归并排序实现,时间复杂度更低:
# 仅适用df1、df2各自已按时间列升序排序的场景 combined_df = pd.merge_ordered(df1, df2, on='你的时间列名')
内容的提问来源于stack exchange,提问作者user1977050
相关产品推荐
相关产品推荐

