将向量的最后n个时段设置为高和低

时间:2014-01-10 23:39:22

标签: python pandas dataframe

在Python中给定时间范围内从list / numpy / vector / pandas列获取最高值的最佳方法是什么?

我有一个pandas数据框,对于其中一个列我想要一个新列,其中包含过去3个值的最大值(或者给定的过去时间帧)。

例如,我想从仅使用timestamp和value1列开始构建此数据帧:

timestamp   value1  max3    min3
10:00:00    8       NA      NA
10:00:05    2       NA      NA
10:00:10    5       NA      NA
10:00:15    7       8       2
10:00:20    10      7       2

我可以通过for循环轻松完成此操作,但效率非常低。那么,更快的替代方案呢?

1 个答案:

答案 0 :(得分:2)

您似乎希望rolling_maxrolling_minshift相结合,因为您不希望在计算中包含当前值:

In [17]: df
Out[17]: 
                     value1
timestamp                  
2014-01-10 10:00:00       8
2014-01-10 10:00:05       2
2014-01-10 10:00:10       5
2014-01-10 10:00:15       7
2014-01-10 10:00:20      10

[5 rows x 1 columns]

In [18]: df['max3'] = pd.rolling_max(df['value1'], window=3).shift()

In [19]: df['min3'] = pd.rolling_min(df['value1'], window=3).shift()

In [20]: df
Out[20]: 
                     value1  max3  min3
timestamp                              
2014-01-10 10:00:00       8   NaN   NaN
2014-01-10 10:00:05       2   NaN   NaN
2014-01-10 10:00:10       5   NaN   NaN
2014-01-10 10:00:15       7     8     2
2014-01-10 10:00:20      10     7     2

[5 rows x 3 columns]