Python Pandas - 根据 2 个数据帧的列删除行

Python Pandas - drop rows based on columns of 2 dataframes

我有 2 个数据框,其中有一列名为 frames。数据帧是关于从两个参与者同时录制的 2 个视频中提取的数据。由于跟踪失败,数据缺少一些帧(每个视频不同)。我想根据帧整数值 df['frame'].

取交集

此处发布了类似的问题:Pandas - intersection of two data frames based on column entries ,但接受的答案是连接,而不是交集。

示例数据

import pandas as pd

df1 = pd.DataFrame(data={'frame': [1, 2, 3]})
df2 = pd.DataFrame(data={'frame': [2, 3, 4]})

期望的输出

删除了不在 df1['frame']df2['frame']

联合中的行
>>> print(df1)
   frame
1      2
2      3

>>> print(df2)
   frame
0      2
1      3

(我可以在使用 df1.reset_index(drop=True) 完成处理后重置索引)

尝试过

我想到首先获取两个数据帧的帧列的交集:

df1_idx = df1['frame']
df2_idx = df2['frame']
intersection_idx = df1_idx.intersection(df2_idx)

错误:

File "/*python_path*/site-packages/pandas/core/generic.py", line 3081, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'intersection'

在获得两个数据帧中的帧索引后,我正在考虑做类似的事情(在: 中提到):

df1 = df1.drop(df[~df['frame'].isin(intersection_idx)])

系统

Python 3.6.5 和 pandas 0.22.0 安装了 Anaconda。

怎么样

df1[df1.frame.isin(df2.frame)]
Out: 
   frame
1      2
2      3

df2[df2.frame.isin(df1.frame)]
Out: 
   frame
0      2
1      3