2014-01-10 53 views
1

在Python中给定时间范围内从列表/ numpy/vector/pandas列获取最高值的最佳方法是什么?获取矢量的最后n个周期的高和低

我有一个熊猫数据框,对于其中一列,我想用过去3个值(或给定的过去时间框架)的最大值来放置一个新列。

比如我要建立这个数据帧开始时只时间戳和值1列:

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 

我可以很容易地用一个做到这一点的周期,但它是非常低效的。那么,有没有更快的选择?

+0

那些斜线使这一堆独立的问题;对于熊猫数据框来说,最好的方法是不能在列表上工作,而使用列表的最好方法是在熊猫数据框上进行缓慢处理。那么......你究竟在问哪一个? – abarnert

回答

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]