在熊猫df中“预见”值的有效方法

时间:2018-02-01 23:58:29

标签: python pandas numpy time-series

我有一个包含时间序列的pandas df,从t(0)开始,我需要向前看t(n)并查看前面的最大值和最小值,在一个由列“from”和“to”。

这是我的df: enter image description here

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

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)

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

2 个答案:

答案 0 :(得分:1)

由于切片的窗口似乎是常量(在你的情况下是100),试试这个:

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

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

答案 1 :(得分:1)

您的移动窗口修复为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