2014-01-10 98 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]