首页 > 解决方案 > 根据数据框中的条件过滤数据

问题描述

我有两个数据框:df1:

  | from id | from group | to id | to group   |
  |    1    |      A     |   3   |      B     |
  |    4    |      B     |   4   |      X     | 
  |    5    |      F     |   5   |      J     |
  |    2    |      B     |   3   |      A     |

df2:

   | From | To |
   |   A  |  B |
   |   F  |  J |

我想过滤掉 df2 中的值,如果存在于 df1 的“从组”和“到组”列中

预期输出:

     | from id | from group | to id | to group   |
     |    4    |      B     |   4   |      X     | 
     |    2    |      B     |   3   |      A     |

我正在寻找一个灵活的解决方案。如果 df2 列中的值发生更改,则不会更改的解决方案。

标签: pythonpandasnumpy

解决方案


您可以使用.mergewith indicator=True,然后过滤df1

x = df1[
    df1.merge(
        df2,
        left_on=["from group", "to group"],
        right_on=["From", "To"],
        indicator=True,
        how="left",
    )._merge.eq("left_only")
]
print(x)

印刷:

   from id from group  to id to group
1        4          B      4        X
3        2          B      3        A

推荐阅读