我有一个如下所示的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()
,因此我正在寻找不使用这些解决方案的解决方案。
任何指针将不胜感激!
答案 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)]