簡體   English   中英

pandas滾動如何保留每個時間窗口的第一次索引

[英]pandas rolling how to retain the first time index of each time window

對不起我所造成的所有困惑。 shift方法非常好。 事實證明, rolling實際上保留了所有指數,我們所要做的就是轉回,無論指數是否規則。


似乎pandas rolling方法總是保留每個時間窗口的最后一個索引。 例:

2017-01-01         NaN
2017-01-02         NaN
2017-01-03    0.654654
2017-01-04   -0.596040
2017-01-05    0.277350
2017-01-06    0.466321
2017-01-07    0.429838
2017-01-08   -0.921551
2017-01-09   -0.188982
2017-01-10   -0.277350
Freq: D, dtype: float64

輸出:

 2017-01-01 NaN 2017-01-02 NaN 2017-01-03 0.654654 2017-01-04 -0.596040 2017-01-05 0.277350 2017-01-06 0.466321 2017-01-07 0.429838 2017-01-08 -0.921551 2017-01-09 -0.188982 2017-01-10 -0.277350 Freq: D, dtype: float64 

但是,我想要的是一種讓每個時間窗保持其第一個索引的方法 可能嗎?


請注意,簡單地移動時間索引軸將無濟於事,因為時間窗口可能不是常規的(即使它們具有相同數量的索引)。 例如,當時間指數為工作日 ,而不是連續的日歷日期:

 Index([2007-01-04, 2007-01-05, 2007-01-08, 2007-01-09, 2007-01-10, 2007-01-11], dtype='object', name='date') 

現在,如果我們用window=3進行rolling ,我想要的是類似的東西

 2017-01-04 ... 2017-01-09 ... 

用傳統的rolling method ,它將是

 2017-01-08 ... 2017-01-11 ... 

如您所見,如果您只是將輸出日期移回2 (因為每個時間窗口的長度為3個索引),您將無法獲得所需的日期。

想法1
通過首先反轉數據幀然后再返回來破解...

(lambda d: d.a.rank().rolling(3).corr(d.b.rank()).iloc[::-1])(df.iloc[::-1])

2017-01-01    0.891042
2017-01-02    0.838628
2017-01-03    0.960769
2017-01-04   -0.897918
2017-01-05   -0.996616
2017-01-06    0.327327
2017-01-07    0.443533
2017-01-08   -0.178538
2017-01-09         NaN
2017-01-10         NaN
Freq: D, dtype: float64

想法2

使用pd.Series.shift

rolling_spearmanr.shift(-2)

2017-01-01    0.891042
2017-01-02    0.838628
2017-01-03    0.960769
2017-01-04   -0.897918
2017-01-05   -0.996616
2017-01-06    0.327327
2017-01-07    0.443533
2017-01-08   -0.178538
2017-01-09         NaN
2017-01-10         NaN
Freq: D, dtype: float64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM