使用多重条件对DataFrame进行掩码处理
我知道可以通过一些方法在数据框中屏蔽掉某些行,比如:
(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"]
的值。