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
我有 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