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

如何合并同日期不同时间记录的两个Pandas DataFrame?

如何合并两个同结构但时间点不同的Pandas DataFrame并按时间排序?

我明白你的需求了——你需要把两个结构相同、日期范围一致但时间点不重叠的DataFrame合并成一个,并且所有行按datetime字段的时间顺序排列,而不是简单把第二个df接在第一个后面,或者变成多列。

下面是具体的解决方案:

核心思路

先确保datetime列为datetime类型(保证排序逻辑正确),然后用pd.concat()合并两个DataFrame的行,最后按datetime字段排序即可。

完整代码示例

先构造你提供的示例数据,再执行合并操作:

import pandas as pd

# 构造df1
df1_data = {
    'datetime': ['2011-01-01 2:00', '2011-01-01 4:00', '2011-01-01 5:00', 
                 '2011-01-01 7:00', '2011-01-01 8:00', '2011-01-01 10:00'],
    'temperature': [12, 12, 13, 18, 21, 21]
}
df1 = pd.DataFrame(df1_data)
df1['datetime'] = pd.to_datetime(df1['datetime'])

# 构造df2
df2_data = {
    'datetime': ['2011-01-01 0:00', '2011-01-01 3:00', '2011-01-01 6:00', '2011-01-01 9:00'],
    'temperature': [13, 11.6, 15, 20.6]
}
df2 = pd.DataFrame(df2_data)
df2['datetime'] = pd.to_datetime(df2['datetime'])

# 合并并按时间排序,重置索引
merged_df = pd.concat([df1, df2]).sort_values(by='datetime').reset_index(drop=True)

print(merged_df)

运行结果

输出就是你期望的按时间顺序排列的合并DataFrame:

datetime  temperature
0 2011-01-01 00:00:00         13.0
1 2011-01-01 02:00:00         12.0
2 2011-01-01 03:00:00         11.6
3 2011-01-01 04:00:00         12.0
4 2011-01-01 05:00:00         13.0
5 2011-01-01 06:00:00         15.0
6 2011-01-01 07:00:00         18.0
7 2011-01-01 08:00:00         21.0
8 2011-01-01 09:00:00         20.6
9 2011-01-01 10:00:00         21.0

为什么之前的方法不符合预期?

  • df.append():虽然能合并行,但默认保留两个df原来的顺序,df2的所有行都会排在df1后面,不会自动按时间排序。
  • pd.merge():这个方法是按指定键匹配合并,默认会把相同datetime的行合并成一行,不同datetime的行则会出现缺失值,最终结果是左右扩展的结构,和你想要的单行时间序列不符。

额外提示

如果你的原始DataFrame中datetime列还不是datetime类型,一定要先转换,否则字符串排序可能出错(比如"2011-01-01 10:00"会排在"2011-01-01 2:00"前面,因为字符串是按字符顺序比较的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:50