在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循环轻松完成此操作,但效率非常低。那么,更快的替代方案呢?
答案 0 :(得分:2)
您似乎希望rolling_max
和rolling_min
与shift
相结合,因为您不希望在计算中包含当前值:
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]