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

如何合并带时间戳的pandas DataFrame且不覆盖原有旧数据?

如何用Pandas合并两个DataFrame并保留旧数据的原有内容

原始数据A

timestamp,some_value
389434893,abc
348973493,dac
128197291,fgd

更新数据B

这是A的更新版本,包含更多数据,部分原有行的some_value字段已修改,但timestamp未变:

timestamp,some_value
389434893,wwwwwwe # timestamp未变更
348973493,wwwwags # timestamp未变更
128197291,wwaswww # timestamp未变更
982379283,ggg

合并需求

合并A与B时,必须保留A中原有行的全部内容(哪怕B里对应timestamp的some_value已经修改),同时添加B里A没有的新行,最终结果如下:

timestamp,some_value
389434893,abc # 来自A
348973493,dac # 来自A
128197291,fgd # 来自A
982379283,ggg # 来自B的新行

实现方法

推荐两种简单直接的Pandas操作方式:

方法一:拼接后去重

先把A放在前面、B放在后面拼接成一个大DataFrame,再按timestamp去重,保留第一次出现的行(也就是A里的原始内容):

import pandas as pd

# 假设已加载好df_a(对应数据A)和df_b(对应数据B)
df_a = pd.read_csv("data_a.csv")
df_b = pd.read_csv("data_b.csv")

# 合并并去重
result = pd.concat([df_a, df_b]).drop_duplicates(subset="timestamp", keep="first")

方法二:提取新行再合并

先筛选出B中timestamp不在A里的新行,再把这些新行和A直接拼接:

import pandas as pd

df_a = pd.read_csv("data_a.csv")
df_b = pd.read_csv("data_b.csv")

# 筛选B中的新行
new_rows_from_b = df_b[~df_b["timestamp"].isin(df_a["timestamp"])]

# 合并A和新行
result = pd.concat([df_a, new_rows_from_b])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:30:57