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

合并两个时间序列DataFrame以获取无重复且包含所有唯一日期的有序结果

合并两个时间序列DataFrame以获取无重复且包含所有唯一日期的有序结果

我明白你想要的是一个包含两个DataFrame所有唯一日期、没有重复条目,并且严格按日期顺序排列的结果。你用pd.concat()的思路方向是对的,但确实缺少了去重和排序这两个关键步骤,所以才会出现重复日期和乱序的问题。

下面给你两种高效的解决方案,根据你的场景选择即可:

方法一:合并后去重+排序(最简洁,适合公共日期数据一致的场景)

因为你的两个DataFrame中,公共日期对应的Temp值是完全一致的,所以直接合并后去除重复日期,再排序就可以得到想要的结果:

import pandas as pd

# 你的原始数据
df1 = pd.DataFrame({'Date': [pd.to_datetime('1980-01-03'), pd.to_datetime('1980-01-04'),
                             pd.to_datetime('1980-01-05'), pd.to_datetime('1980-01-06'),
                             pd.to_datetime('1980-01-07'), pd.to_datetime('1980-01-08')],
                    'Temp': [13.5,10,14,12,10,9]})

df2 = pd.DataFrame({'Date': [pd.to_datetime('1980-01-01'), pd.to_datetime('1980-01-02'),
                             pd.to_datetime('1980-01-03'), pd.to_datetime('1980-01-04')],
                    'Temp': [10,17,13.5,10]})

# 核心步骤:合并 → 按日期去重 → 按日期排序 → 重置索引
merged_df = pd.concat([df1, df2]) \
              .drop_duplicates(subset='Date') \
              .sort_values('Date') \
              .reset_index(drop=True)

print(merged_df)

关键代码解释:

  • drop_duplicates(subset='Date'):指定按Date列去重,保留每个日期第一次出现的条目(因为你的公共日期数据一致,所以不管保留哪个都没问题;如果后续遇到公共日期数据不同的情况,可以通过keep参数调整,比如keep='last'保留最后一个)
  • sort_values('Date'):将结果按日期从小到大排序,保证时间序列的顺序
  • reset_index(drop=True):重置索引为连续的0开始的序列,让结果更整洁

方法二:外连接合并(更灵活,适合公共日期数据可能不同的场景)

如果后续你的两个DataFrame中,同一日期可能出现不同的Temp值,用外连接的方式可以更灵活地处理这种冲突:

import pandas as pd

# 原始数据同上,省略

# 核心步骤:外连接合并 → 合并Temp列 → 整理列并排序
merged_df = pd.merge(df1, df2, on='Date', how='outer')
# 合并Temp列:优先用df1的Temp值,为空则用df2的(可根据需求调整顺序)
merged_df['Temp'] = merged_df['Temp_x'].combine_first(merged_df['Temp_y'])
# 保留需要的列、排序并重置索引
merged_df = merged_df[['Date', 'Temp']].sort_values('Date').reset_index(drop=True)

print(merged_df)

关键代码解释:

  • pd.merge(..., how='outer'):外连接会保留两个DataFrame的所有日期,公共日期会生成Temp_x(来自df1)和Temp_y(来自df2)两列
  • combine_first():可以优雅地合并两列的值,优先取第一列的非空值,第一列为空时用第二列的值,适合处理数据冲突

两种方法最终都会输出你想要的结果:

Date  Temp
0 1980-01-01  10.0
1 1980-01-02  17.0
2 1980-01-03  13.5
3 1980-01-04  10.0
4 1980-01-05  14.0
5 1980-01-06  12.0
6 1980-01-07  10.0
7 1980-01-08   9.0

备注:内容来源于stack exchange,提问作者Sayantan4796

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:17:59