【问题标题】:Python Pandas - drop rows based on columns of 2 dataframesPython Pandas - 基于 2 个数据框的列删除行
【发布时间】:2018-10-17 01:03:58
【问题描述】:

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

在获得两个数据帧中的帧索引后,我正在考虑做类似的事情(在:dropping rows from dataframe based on a "not in" condition 中提到):

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

系统

Python 3.6.5 和安装了 Anaconda 的 pandas 0.22.0。

【问题讨论】:

    标签: python pandas dataframe set-intersection


    【解决方案1】:

    怎么样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2018-05-22
      • 2016-09-05
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多