Пулевой логический порядок фильтрации - PullRequest
0 голосов
/ 30 августа 2018

Я встретил проблему с пандами. Например, у меня есть датафрейм, и я хочу отфильтровать его.

df = pd.DataFrame({'A': [i for i in range(5)], 
                   'B': [i ** 2 for i in range(5)]}) 

df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]

Но почему это так работает? Почему второй оператор выполняется для всех строк? Я думал, что Панды могут фильтровать по порядку с помощью логики и (оператор &)

enter image description here

Может кто-нибудь объяснить мне? Как я могу использовать фильтр в одном фрейме данных без переназначения фрейма данных?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Или вы можете сделать это:

df.loc[df.A > 2, "isCalled"] = 'called'

А для других строк:

df.loc[~df.A > 2, "isCalled"] = 'not called'
0 голосов
/ 30 августа 2018

print возвращает None и т. Д.

df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]

совпадает с

df[(df.A > 2) & pd.Series([None]*5)] 

, что совпадает с

df[pd.Series([None]*5)]

все элементы интерпретируются как False, поэтому вы получаете пустое значение DataFrame

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...