短路numpy logical_and大熊猫系列

时间:2018-05-14 08:10:42

标签: python pandas numpy short-circuiting

我创建了一个在pandas数据帧中使用的掩码:

 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 :(得分:1)

一个想法是:

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

Anoather想法,如果大多数值不匹配,则首先过滤第二个,然后过滤第二个:

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)]