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

Python合并多个Pandas DataFrame按date排序去重的实现方案

解决方案

现有代码存在两处不符合需求的问题:

  1. 没有对合并后的结果按date字段排序
  2. 默认drop_duplicates()是校验全字段值完全一致才会判定为重复,你案例里两个2021-10-21 00:03:00对应的Unix Timesamp值不同,不会被识别为重复行,自然无法删除。

你只需要在原有链式调用的基础上新增排序逻辑,同时调整去重方法的参数即可,修改后的完整代码如下:

import pandas as pd 

data = {'Unix Timesamp': [1444311600000, 1444311660000, 1444311720000], 
        'date': ['2015-10-08 13:40:00', '2015-10-08 13:41:00', '2015-10-08 13:42:00'],
        'Symbol': ['BTCUSD', 'BTCUSD', 'BTCUSD'],
        'Open': [10384.54, 10389.08,10387.15],
        'High': [10389.08, 10389.08, 10388.36],
        'Low': [10340.2, 10332.8, 10385]}

data2 = {'Unix Timesamp': [1634774460000, 1634774520000, 1634774580000], 
        'date': ['2021-10-21 00:01:00', '2021-10-21 00:02:00', '2021-10-21 00:03:00'],
        'Symbol': ['BTCUSD', 'BTCUSD', 'BTCUSD'],
        'High': [4939.97, 4961.75, 4964.33],
        'Open': [4939.95, 4959.18,4964.33]}

data3 = {'Unix Timesamp': [1634774640000, 1634774640000], 
        'date': ['2021-10-21 00:03:00', '2021-10-21 00:04:00'],
        'High': [4964.33, 4867.33],
        'Symbol': ['BTCUSD', 'BTCUSD'],
        'Open': [4964.33, 4800.2]}

dataset = pd.DataFrame.from_dict(data)
dataset2 = pd.DataFrame.from_dict(data2)
dataset3 = pd.DataFrame.from_dict(data3)

result = dataset.drop('Low', axis=1)\
                .append([dataset2, dataset3], ignore_index=True)\
                .sort_values('date', ascending=True)\
                .drop_duplicates(subset='date', keep='first', ignore_index=True)

新增/调整的逻辑说明:

  • sort_values('date', ascending=True):按date字段升序排列所有合并后的数据,符合你要求的同步排序规则
  • drop_duplicates(subset='date', keep='first', ignore_index=True):仅以date字段作为重复判断依据,重复数据默认保留第一条(如果需要保留后一条可以把keep参数改为last),去重后自动重置索引
  • 额外把原代码里的drop('Low',1)调整为drop('Low', axis=1),兼容pandas高版本语法,避免废弃警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:06