You need to enable JavaScript to run this app. 如何使用Pandas基于时间戳列合并两个仅共享该列的DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas基于时间戳列合并两个仅共享该列的DataFrame

基于时间戳的Pandas DataFrame合并实现

你需要的合并逻辑本质是连接键完全匹配的全外连接,之前的尝试选了错误的连接方式和工具,调整参数即可实现完全匹配需求的输出。

核心实现代码

直接使用pandas.merge指定全外连接模式即可,缺失值会自动填充为NaN:

merged_df = pd.merge(
    left=gt,
    right=svo,
    on="time",  # 两表唯一的共享列作为连接键
    how="outer" # 取两表所有time值的并集,保留全部时间点
)
# 按时间戳升序排序,重置索引匹配示例输出的顺序
merged_df = merged_df.sort_values("time").reset_index(drop=True)

运行后得到的结果和你给出的预期输出完全一致:

time  gt_x  gt_y  gt_z  svo_x  svo_y  svo_z
0   1.5  50.0  60.0  70.0   11.1   13.2   17.3
1   2.0  55.0  65.0  75.0    NaN    NaN    NaN
2   2.5   NaN   NaN   NaN    7.4   34.5   23.6
3   3.0  57.5  67.5  77.5    NaN    NaN    NaN
4   3.5   NaN   NaN   NaN   15.7   32.8   19.9

之前尝试失败的常见原因

  • 选用inner连接模式:只会保留两个表共有的时间戳,本场景下仅能匹配到1.5这一行的结果,完全不符合“保留所有时间点”的需求
  • 误用merge_asof:该工具的设计逻辑是为左表每一行匹配右表中最近邻的小于/等于键值的行,不是严格按键值相等匹配,会强制做时间邻近对齐,自然无法实现精确时间戳匹配的效果

等效备选方案

如果习惯以索引为连接基准,也可以将time列设为索引后用join方法实现,最终结果和上述代码完全一致:

merged_df = gt.set_index("time").join(svo.set_index("time"), how="outer")
# 将索引中的time转回普通列,对齐结构
merged_df = merged_df.reset_index().sort_values("time").reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 22:27:06