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

Python Pandas:如何按Timestamp合并存在差异的两个DataFrame

解决Timestamp列部分差异的DataFrame合并问题

你遇到的问题核心是用错了方法——concatenate是用来简单堆叠数据的,没办法处理基于特定列的匹配合并。你需要的是基于Timestamp列的外连接(outer join),这样能保留两个DataFrame里所有的Timestamp值,匹配上的行合并,没匹配上的自动补NaN,正好符合你的预期结果。

具体实现代码

先看完整的可运行示例:

import pandas as pd

# 构造你的示例数据
# df1数据
data1 = {
    'Timestamp': ['2019-10-25 10:39:58.352073', '2019-10-25 10:40:06.266782',
                  '2019-10-25 16:35:22.485574', '2019-10-27 09:50:31.713192',
                  '2019-10-28 14:04:33.095633', '2019-10-28 14:05:07.639344'],
    'Flag': ['begin', 'end', 'begin', 'end', 'begin', 'end'],
    'Group': ['prod', 'prod', 'clean', 'clean', 'transport', 'transport']
}
df1 = pd.DataFrame(data1)

# df2数据
data2 = {
    'Timestamp': ['2019-10-25 10:39:58.352073', '2019-10-25 10:40:06.266782',
                  '2019-10-25 16:35:22.485574', '2019-10-25 17:00:00.000000',
                  '2019-10-26 07:00:00.000000', '2019-10-26 17:00:00.000000',
                  '2019-10-27 07:00:00.000000', '2019-10-27 09:50:31.713192',
                  '2019-10-28 14:04:33.095633', '2019-10-28 14:05:07.639344']
}
df2 = pd.DataFrame(data2)

# 关键:用merge做外连接,以df2为左表保证顺序
merged_df = pd.merge(df2, df1, on='Timestamp', how='outer')

# 输出结果
print(merged_df)

代码解释

  • pd.merge(df2, df1, on='Timestamp', how='outer'):
    • how='outer':指定外连接,会保留两个DataFrame中所有的Timestamp值,不管是否在对方存在
    • on='Timestamp':明确用Timestamp列作为匹配的键
    • 把df2放在左表位置,这样合并后的行顺序会和df2的原始顺序一致,完全符合你期望的结果

为什么concatenate不行?

pd.concat()的作用是把两个DataFrame按行/列堆叠,不会做任何匹配逻辑。如果直接用它合并,会出现重复的Timestamp行,而且df1的Flag/Group列无法对应到df2中匹配的Timestamp上,这就是你遇到唯一性问题的根源——concat根本不是用来做这种匹配合并的工具。

额外优化建议

如果你的Timestamp列目前是字符串类型,建议先转换成datetime类型,这样能避免字符串格式细微差异导致的匹配失败:

df1['Timestamp'] = pd.to_datetime(df1['Timestamp'])
df2['Timestamp'] = pd.to_datetime(df2['Timestamp'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:22:39