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

Python Pandas:基于两DataFrame的frame列求帧值交集并删无关行

获取两个DataFrame基于frame列的行交集(非连接)

嘿,我明白你要的是什么——不是把两个表合并成一个,而是分别从两名参与者的DataFrame里,只保留那些双方都成功跟踪到的帧(也就是frame列整数值完全相同的行)对吧?之前那个连接操作的答案确实没贴合需求,这里给你两个精准实现的方法:

方法1:先提取共同帧,再筛选(清晰直观)

先拿到两个DataFrame中frame列的共同值集合,再分别对两个原表做筛选,保留对应行:

import pandas as pd

# 构造示例数据(模拟跟踪失败导致的帧缺失)
df1 = pd.DataFrame({
    'frame': [1, 2, 3, 5, 7],
    'participant1_data': [10, 20, 30, 50, 70]
})

df2 = pd.DataFrame({
    'frame': [2, 3, 4, 6, 7],
    'participant2_data': [200, 300, 400, 600, 700]
})

# 第一步:获取两个frame列的交集
common_frames = df1['frame'].intersection(df2['frame'])

# 第二步:分别筛选两个DataFrame,只保留共同帧的行
df1_filtered = df1[df1['frame'].isin(common_frames)]
df2_filtered = df2[df2['frame'].isin(common_frames)]

执行后,df1_filtered会保留frame为2、3、7的行,df2_filtered同样保留这些帧的行,完全保留了各自原表的结构,只筛选出共同存在的帧数据。

方法2:直接用isin()交叉筛选(简洁高效)

如果不需要单独保存共同帧的集合,也可以直接一步完成筛选,省掉中间变量:

# 直接筛选df1中存在于df2的frame行
df1_filtered = df1[df1['frame'].isin(df2['frame'])]
# 直接筛选df2中存在于df1的frame行
df2_filtered = df2[df2['frame'].isin(df1['frame'])]

这个方法和上面的结果完全一致,代码更短,适合快速实现。

为什么连接操作不符合需求?

之前的采纳答案用了merge类的连接操作,会把两个DataFrame的列合并到同一个表里,变成类似frame | participant1_data | participant2_data的结构,但你要的是两个独立的DataFrame,各自只保留共同帧的行,这才是真正意义上基于frame列的“交集”筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:47:55