【问题标题】:Short circuit numpy logical_and on pandas series短路 numpy logical_and 在 pandas 系列上
【发布时间】:2018-05-14 08:10:41
【问题描述】:

我创建了一个要在 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 系列的计算相当慢。它上面的方法计算两个系列,然后将它们相加 - 是否有一种(惯用的)方法来短路每个元素,因为第一个系列大多是错误的,所以我们不需要计算其他系列的元素?

【问题讨论】:

标签: python pandas numpy short-circuiting


【解决方案1】:

一个想法是:

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

【讨论】:

  • 感谢您的技巧 - 但由于 python 对表达式的热切评估,此 IIRC 仍将计算这两个系列
  • @Mr_and_Mrs_D - 嗯,我想我理解你,但不确定 numpy/pandas 是否支持它。因为需要寻找不同的值集 --- 小时和天。
  • 妙招 - 因为无论如何都会计算第一个数组
猜你喜欢
  • 2018-06-01
  • 1970-01-01
  • 2019-07-02
  • 2017-07-13
  • 2018-07-25
  • 2019-01-19
  • 1970-01-01
  • 2018-06-02
  • 2019-05-05
相关资源
最近更新 更多