使用多重条件对DataFrame进行掩码处理

7 投票
1 回答
7086 浏览
提问于 2025-04-18 18:02

我知道可以通过一些方法在数据框中屏蔽掉某些行,比如:

(1) mask = df['A']=='a'

这里的 df 是我们手头的数据框,它有一列叫做 'A'。调用 df[mask] 就能得到我新的“屏蔽”数据框。

当然,我们也可以使用多个条件来筛选数据,方法是:

(2) mask = (df['A']=='a') | (df['A']=='b')

不过,当需要满足多个条件时,这最后一步可能会变得有点繁琐,比如:

(3) mask = (df['A']=='a') | (df['A']=='b') | (df['A']=='c') | (df['A']=='d') | ...

现在,假设我把我的筛选条件放在一个数组里,像这样:

(4) filter = ['a', 'b', 'c', 'd', ...]
    # ... here means a lot of other criteria

有没有办法用一行代码得到和上面(3)一样的结果呢?

类似于:

(5) mask = df.where(df['A']==filter)
    df_new = df[mask]

在这种情况下,(5) 显然会返回一个错误。

1 个回答

9

我会使用 Series.isin() 这个方法:

filter = ['a', 'b', 'c', 'd']
df_new = df[df["A"].isin(filter)]

df_new 是一个数据表(DataFrame),它的行是那些在 filter 中出现的 df["A"] 的值。

撰写回答