Панды - связывание нескольких методов .loc. - PullRequest
0 голосов
/ 03 мая 2018

В пандах есть ли способ объединить индексирование по метке и индексирование по логической маске в одном вызове .loc?

В настоящее время у меня есть это:

df.loc[start_date:end_date][[np.is_busday(x, holidays=dd.all_holidays) for x in df.index]]

Что отлично работает, но мне любопытно, есть ли лучшая альтернатива. Благодарю.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете преобразовать индекс в серию, а затем использовать pd.Series.between и pd.Series.apply:

s = pd.Series(df.index)

df.loc[s.between(start_date, end_date) & \
       s.apply(np.is_busday, holidays=dd.all_holidays)]
0 голосов
/ 03 мая 2018

Запрос может быть более эффективным, поскольку он будет векторизован, но все зависит от того, сколько данных вы отфильтровали в первую очередь.

df.query(
    '(@start_date <= index < @end_date) & '
    '@np.is_busday(index, holidays=@dd.all_holidays)'
)

Примечание: вы уверены, что ваша логическая маска работает? df и датафрейм (возвращаемый loc), который вы индексируете с помощью маски, могут больше не иметь одинаковую длину.

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