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

如何在Pandas中合并/连接/拼接/对齐时间间隔与大小不同的两个DataFrame

我懂你这种困扰——两个时间戳不规整的DataFrame,一个规模小一个规模大,要合并成包含所有行的新表确实容易卡壳。咱们一步步来解决:

解决方案:合并两个时间间隔不均匀的DataFrame

核心思路是先统一时间列的格式与名称,再通过全外连接保留所有行数据:

步骤1:统一时间列并转为datetime类型

两个表的时间列名一个是Time一个是time,而且字符串格式的时间没法精准匹配,所以先做标准化处理:

import pandas as pd

# 先构造你提供的示例数据
df1 = pd.DataFrame({
    'Time': ['2015-04-07 09:09:48', '2015-04-07 09:30:50', '2015-04-07 09:31:07', '2015-04-07 09:35:23', '2015-04-07 09:47:43'],
    'a': [185.25, 190.50, 187.00, 190.60, 185.30]
})

df2 = pd.DataFrame({
    'time': ['2016-06-08 09:09:00', '2016-06-08 09:09:48', '2016-06-08 09:24:22', '2016-06-08 09:30:50'],
    'b': [32.30, 32.35, 32.30, 32.40],
    'c': [32.80, 32.89, 32.81, 32.84]
})

# 统一时间列名称为'time'
df1 = df1.rename(columns={'Time': 'time'})

# 转换为datetime类型,确保时间匹配的准确性
df1['time'] = pd.to_datetime(df1['time'])
df2['time'] = pd.to_datetime(df2['time'])

步骤2:执行全外连接合并

用pd.merge的outer连接方式,会保留两个表中所有的时间行,没有对应数据的位置自动填充NaN:

# 按时间列做全外连接
merged_df = pd.merge(df1, df2, on='time', how='outer')

# 可选:按时间排序,让结果更直观
merged_df = merged_df.sort_values('time').reset_index(drop=True)

最终效果

合并后的表会包含两个源表的所有行,时间对齐后缺失值用NaN填充,示例结果片段如下:

time a b c
2015-04-07 09:09:48 185.25 NaN NaN
2015-04-07 09:30:50 190.50 NaN NaN
...
2016-06-08 09:09:00 NaN 32.30 32.80
2016-06-08 09:09:48 NaN 32.35 32.89

如果两个表存在相同时间点(比如假设df1和df2有重合的时间戳),对应的a、b、c会自动合并到同一行,完全满足你保留所有行的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:24