【问题标题】:Efficient way to “look ahead” values in a pandas df在 pandas df 中“向前看”值的有效方法
【发布时间】:2018-07-12 10:12:34
【问题描述】:

我有一个包含时间序列的 pandas df,从 t(0) 开始,我需要向前看 t(n),看看前面的最大值和最小值是什么,在定义的大小切片中“从”和“到”列。

这是我的 df:

这是我的解决方案,它有效,但速度极慢:

df[‘max_ahead’] = df.apply(lambda x: df[‘value’][int(df[‘from’]):int(df[‘to’])].max(), axis=1)
df[‘min_ahead’] = df.apply(lambda x: df[‘value’][int(df[‘from’]):int(df[‘to’])].min(), axis=1)

有没有办法在 pandas 或 numpy 数组中加快速度?我的 df 包含数百万行,上面的代码耗时太长。

【问题讨论】:

  • 请提供minimal reproducible example。特别是不要粘贴图像。这不是我们可以复制和利用来帮助制定解决方案的代码。

标签: python pandas numpy time-series


【解决方案1】:

由于要切片的窗口似乎是恒定的(在您的情况下为 100),请尝试以下操作:

df['max_ahead'] = df[value].rolling(window=100).max()
df['max_ahead'] = df['max_ahead'].shift(-100)

最后的转变会重新创建您想要的解决方案,而不必使用 apply lambda,这可能会很慢。

【讨论】:

    【解决方案2】:

    你的移动窗口是fix 100,那么我们可以在这里申请rolling 例如:对于这个示例数据框,我选择移动窗口=2

    df=pd.DataFrame({'V':[1,2,3,4,5,6,7,8,9,10]})
    df.rolling(window=2).min()
    Out[474]: 
         V
    0  NaN
    1  1.0
    2  2.0
    3  3.0
    4  4.0
    5  5.0
    6  6.0
    7  7.0
    8  8.0
    9  9.0
    

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 2018-11-11
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2017-05-02
      • 2022-10-19
      • 2023-04-06
      • 2022-01-07
      相关资源
      最近更新 更多