pd.df Логическое маскирование на основе значений в списке - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть 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

Я хочу исключить conId из этого df, которые есть в списке:

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 голосов
/ 22 ноября 2018

Вы можете инвертировать isin () с помощью -:

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

Сложные выборы можно выполнить, сопоставив интересующий столбец:

df[df['conId'].map(lambda x: x not in excl)]
0 голосов
/ 22 ноября 2018

Существует как минимум пара способов:

query

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

loc

res = df.loc[~df['conId'].isin(excl)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...