Короткое замыкание numpy logic_и на пандах серии - PullRequest
0 голосов
/ 14 мая 2018

Я создаю маску для использования в кадре данных панд:

 mask = np.logical_and(
                csv_df['time'].map(operator.attrgetter('hour')).isin(
                    hours_set),
                csv_df['time'].map(lambda x: x.weekday_name[:3]).isin(
                    days_set))
csv_df = csv_df.loc[mask, :]

Оказывается, что вычисление двух isin серий довольно медленное. Приведенный выше способ вычисляет обе серии, а затем добавляет их - существует ли (идиоматический) способ короткого замыкания на элемент, поскольку первая серия в основном ложная, поэтому нам не нужно вычислять элемент другой серии?

1 Ответ

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

Одна идея:

mask = csv_df['time'].dt.hour.isin(hours_set) & 
       csv_df['time'].dt.strftime('%a').isin(days_set)

Еще одна идея, если большинство не совпадающих значений - это сначала фильтр, а затем второй:

csv_df1 = csv_df.loc[csv_df['time'].dt.strftime('%a').isin(days_set)]
csv_df2 = csv_df1.loc[csv_df1['time'].dt.hour.isin(hours_set)]
...