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

Pandas:基于多列索引合并两个时间序列数据框

合并两个DataFrame并保留所有行(全外连接)

没问题!要把这两个DataFrame合并成包含所有状态列且保留所有行的结果,用pandas的全外连接就能轻松实现,具体步骤如下:

核心代码实现

直接使用pd.merge()函数,指定全外连接模式即可:

import pandas as pd

# 执行全外连接合并
merged_df = pd.merge(
    df_1,
    df_2,
    on=['session_id', 'user_id', 'timestamp'],  # 基于这三列匹配行
    how='outer'  # 保留两个DataFrame的所有行
)

参数说明

  • on=['session_id', 'user_id', 'timestamp']:指定用来匹配两行是否属于同一记录的关联键,确保这三个列完全匹配的行会被合并到同一行中。
  • how='outer':这是实现需求的关键参数,它会保留df_1和df_2中的每一行——如果某行在另一个DataFrame中没有匹配的关联键,对应的缺失列会自动用NaN填充。

示例验证

为了更直观地看到效果,我们可以构造测试数据来验证:

# 构造示例df_1
df_1 = pd.DataFrame({
    'session_id': ['s1', 's2', 's3'],
    'user_id': ['u1', 'u2', 'u3'],
    'timestamp': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'state1': [True, False, True],
    'state2': [0, 1, 0]
})

# 构造示例df_2
df_2 = pd.DataFrame({
    'session_id': ['s2', 's3', 's4'],
    'user_id': ['u2', 'u3', 'u4'],
    'timestamp': ['2024-01-02', '2024-01-03', '2024-01-04'],
    'state3': ['active', 'inactive', 'active'],
    'state4': [10, 20, 30]
})

合并后的merged_df会包含以下内容:

  • 来自df_1的s1行(state3和state4为NaN)
  • 同时存在于两个DataFrame的s2、s3行(所有状态列都有值)
  • 来自df_2的s4行(state1和state2为NaN)

完全符合你“保留所有行、包含所有状态列”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:05