我有一個熊貓TimeSeries,並希望將argmax函數應用於滾動窗口。但是,由於casting從rolling_apply浮動,如果我應用numpy.argmax()
,我只能獲得ndarray片的索引。有沒有辦法將滾動argmax應用於Series/DataFrame?在熊貓中滾動argmax
Series.idxmax()
或Series.argmax()
都返回一個TimeStamp對象,但 pandas.rolling_apply(Series, window=10,func=lambda x: pandas.Series(x).idxmax())
將只返回float64。
編輯: 下面是一個例子:
import pandas as pd
import numpy as np
import pandas.io.data as web
import datetime
start = datetime.datetime(2001,1,1)
end = datetime.datetime.today()
close = web.DataReader('AAPL','yahoo',start,end).Close
close = close/close.shift(1) - 1
close.resample('W-MON').idxmax() # Timestamp object
close.resample('W-MON').argmax() # Timestamp object
pd.rolling_apply(close.resample('W-MON'), window=52, func=lambda x: pd.Series(x).argmax())
工作方式是
ix = pd.rolling_apply(close, window=52, func=np.argmax)
ix = np.where(np.isnan(ix),0,ix)
ix = ix.astype(int)
new_index = close.index[52:].map(lambda x: close.index[np.argwhere(close.index==x)-52:np.argwhere(close.index==x)] [ix[np.argwhere(close.index==x)]])
pd.Series(new_index,index=close.index[52:]).apply(lambda x: x.flatten()[0])
但也許有一些 「pandonic」 的方式?
請在這裏舉一個例子輸入串聯,並顯示您的大熊貓版本 – Jeff 2015-04-01 15:10:40
和熊貓的版本是0.16.0 – poeticcapybara 2015-04-01 20:57:04