我前一段時間發佈,但沒有人能解決這個問題。我怎樣才能使用適用於熊貓rolling_corr()
首先讓我們來創建一些相關DataFrames和呼叫rolling_corr()
,與dropna()
因爲我打算以後稀疏起來,並沒有min_period設置爲我想保持結果強勁,並與設定的窗口
hey=(DataFrame(np.random.random((15,3)))+.2).cumsum()
hoo=(DataFrame(np.random.random((15,3)))+.2).cumsum()
hey_corr= rolling_corr(hey.dropna(),hoo.dropna(), 4)
一致給我
In [388]: hey_corr
Out[388]:
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 0.991087 0.978383 0.992614
4 0.974117 0.974871 0.989411
5 0.966969 0.972894 0.997427
6 0.942064 0.994681 0.996529
7 0.932688 0.986505 0.991353
8 0.935591 0.966705 0.980186
9 0.969994 0.977517 0.931809
10 0.979783 0.956659 0.923954
11 0.987701 0.959434 0.961002
12 0.907483 0.986226 0.978658
13 0.940320 0.985458 0.967748
14 0.952916 0.992365 0.973929
現在
當我稀疏起來它給了我......
hey.ix[5:8,0] = np.nan
hey.ix[6:10,1] = np.nan
hoo.ix[5:8,0] = np.nan
hoo.ix[6:10,1] = np.nan
hey_corr_sparse = rolling_corr(hey.dropna(),hoo.dropna(), 4)
hey_corr_sparse
Out[398]:
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 0.991273 0.992557 0.985773
4 0.953041 0.999411 0.958595
11 0.996801 0.998218 0.992538
12 0.994919 0.998656 0.995235
13 0.994899 0.997465 0.997950
14 0.971828 0.937512 0.994037
數據個
卡盤丟失了,看起來我們只有數據在dropna()
可以形成跨越數據幀完整的窗口
我能解決一個醜陋的ITER-軟糖如下問題......
hey_corr_sparse = DataFrame(np.nan, index=hey.index,columns=hey.columns)
for i in hey_corr_sparse.columns:
hey_corr_sparse.ix[:,i] = rolling_corr(hey.ix[:,i].dropna(),hoo.ix[:,i].dropna(), 4)
hey_corr_sparse
Out[406]:
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 0.991273 0.992557 0.985773
4 0.953041 0.999411 0.958595
5 NaN 0.944246 0.961917
6 NaN NaN 0.941467
7 NaN NaN 0.963183
8 NaN NaN 0.980530
9 0.993865 NaN 0.984484
10 0.997691 NaN 0.998441
11 0.978982 0.991095 0.997462
12 0.914663 0.990844 0.998134
13 0.933355 0.995848 0.976262
14 0.971828 0.937512 0.994037
有沒有人在社區知道是否有可能使這個數組函數來給出這個結果,我試圖使用。應用程序,但畫了一個空白,甚至有可能.apply功能,在兩個數據結構(在這個例子中是hey和hoo)?
千恩萬謝,LW
如果有NaN的一列中,應該把相關窗口無視他們?因爲在這種情況下,索引11上的相關性不是基於不同列的相同行計算的? – joris
它確實取決於數據任務以及爲什麼有NaN,在我的例子中,我特別排除了NaN(vs winsorising)數據,並利用Pandas處理NaN來計算數據。 – Lonewolf
是的,我知道它可以依賴。但只是問,因爲如果你想傳播NaN,你可以在沒有dropna的情況下執行rolling_cor:'rolling_corr(hey,hoo,4)' – joris