首页 > 解决方案 > 在python中删除另一个数据框中具有公共列值的数据框中的行

问题描述

这是数据框 1:

       Date     name    Age 
0   2015-01-02  Adam    1   
1   2015-02-02  David   2   
2   2015-02-02  Mila    2   
3   2015-03-02  Harshan 2   
4   2015-03-02  Hardik  2   
5   2015-03-02  Alex    3   

这是数据框 2:

    Date        name        Age 
0   2015-01-02  Jadeja      1   
1   2015-02-02  Dravid      2   
2   2015-02-02  Dhoni       2   
3   2015-03-02  Hrithik     2   
4   2015-03-02  Hardik      2   
5   2015-03-02  Alex        3

现在我想删除数据框 1 中的行,其中两个数据框的名称列中有共同值

这是预期的输出:

           Date     name    Age 
0   2015-01-02  Adam        1   
1   2015-02-02  David       2   
2   2015-02-02  Mila        2   
3   2015-03-02  Harshan     2

标签: pythondataframe

解决方案


您可以merge使用indicator=True来指示值的来源并仅保留第一个数据帧中的值(“left_only”):

(df1.merge(df2, how='outer', indicator=True)
    .query('_merge == "left_only"')
    .drop('_merge', axis=1)
)

注意。如果您需要限制用于匹配的列,请使用以下on选项merge:例如on=['Date', 'name']

输出:

         Date     name  Age
0  2015-01-02     Adam    1
1  2015-02-02    David    2
2  2015-02-02     Mila    2
3  2015-03-02  Harshan    2

管道第一步之后的中间数据:

         Date     name  Age      _merge
0  2015-01-02     Adam    1   left_only
1  2015-02-02    David    2   left_only
2  2015-02-02     Mila    2   left_only
3  2015-03-02  Harshan    2   left_only
4  2015-03-02   Hardik    2        both
5  2015-03-02     Alex    3        both
6  2015-01-02   Jadeja    1  right_only
7  2015-02-02   Dravid    2  right_only
8  2015-02-02    Dhoni    2  right_only
9  2015-03-02  Hrithik    2  right_only

推荐阅读