如何在Pandas中合并股票时间序列DataFrame并优先保留新数据以避免重复列?
解决方法:合并重叠时间序列DataFrame并优先保留新数据
这个问题其实很常见——要合并两个有重叠时间序列的DataFrame,并且优先保留新数据(df1),同时避免生成重复列。你之前用merge_ordered的方式确实会把相同时间的行拆分成两组列,这不是我们想要的效果。
这里有个简单直接的解决方案,核心思路是先把两个DataFrame合并,然后基于open time去重并保留新数据,最后重新排序:
步骤1:确保时间列是datetime类型
首先,确保你的open time列是datetime类型(如果还不是的话),这样后续排序和去重更准确:
df['open time'] = pd.to_datetime(df['open time']) df1['open time'] = pd.to_datetime(df1['open time'])
步骤2:合并并去重
执行合并和去重操作,优先保留df1的数据:
# 先把旧数据和新数据合并,注意把新数据放在后面,这样去重时会优先保留它 combined = pd.concat([df, df1]) # 按open time去重,keep='last'表示保留最后出现的行(也就是df1的行) final_df = combined.drop_duplicates(subset='open time', keep='last') # 最后按时间排序,恢复时间序列的顺序,并重置索引 final_df = final_df.sort_values('open time').reset_index(drop=True)
结果说明
这样得到的final_df会满足你的需求:
- 保留df中所有不在df1里的历史行(也就是2021-12-29 23:45到2021-12-30 00:30的记录)
- 保留df1的所有行(包括和df重叠的行,哪怕重叠行的数据有差异,也会优先保留df1的最新数据)
- 结构和原DataFrame完全一致,没有任何重复列
这个方法非常适合股票价格这类时间序列的增量更新场景,逻辑清晰且效率很高。
内容的提问来源于stack exchange,提问作者abraguez
相关产品推荐
相关产品推荐

