pd.df基于列表中的值的布尔掩码

时间:2018-11-22 02:54:29

标签: python pandas numpy

我有一个如下所示的df:

  asset                    expiry   strike right position avgCost multiplier   conId
1   ZN  2018-12-21 22:00:00+00:00   118.5   C   -120.0  0.629052    1000   328020292
2   ZN  2018-12-21 22:00:00+00:00   118.5   P   -120.0  0.610823    1000   328020755
3   ZN  2018-12-21 22:00:00+00:00   119.0   C   200.0   0.576682    1000   328020299
0   ZN  2018-12-21 22:00:00+00:00   119.0   P   200.0   0.570434    1000   328020758

我希望从列表中的此df中排除conId:

excl = [328020755, 328020292]

因此所需的输出将是:

  asset                    expiry   strike right position avgCost multiplier   conId
3   ZN  2018-12-21 22:00:00+00:00   119.0   C   200.0   0.576682    1000   328020299
0   ZN  2018-12-21 22:00:00+00:00   119.0   P   200.0   0.570434    1000   328020758

由于不推荐使用pd.mask()pd.where(),因此我正在寻找不使用这些解决方案的解决方案。 任何指针将不胜感激!

2 个答案:

答案 0 :(得分:2)

至少有两种方法:

query

res = df.query('conId not in @excl')

loc

res = df.loc[~df['conId'].isin(excl)]

答案 1 :(得分:1)

您可以使用-反转isin():

df[-df['conId'].isin(excl)]

可以通过在感兴趣的列上进行映射来执行复杂选择:

df[df['conId'].map(lambda x: x not in excl)]