2012-07-02 69 views
3

我試圖在Python中運行pandas的Winsorized迴歸。該very helpful user manual提供此示例代碼:在Pandas for Python中爲Winsorize數據

winz = rets.copy() 
std_1year = rolling_std(rets, 250, min_periods=20) 
cap_level = 3 * np.sign(winz) * std_1year 
winz[np.abs(winz) > 3 * std_1year] = cap_level 
winz_model = ols(y=winz['AAPL'], x=winz.ix[:, ['GOOG']],window=250) 

第四行看起來我錯了:不應該RHS是cap_level[np.abs(winz) > 3 * std_1year]

感謝您的幫助!我還是使用熊貓數據框的新手,並且想確保我的理解是正確的。

回答

2

編輯:對不起,誤解了這個問題!

你是對的,這對大多數類型來說都是錯誤的;但是pandas.DataFrame對使用​​布爾掩碼設置值有特別的支持;它會從RHS中選擇相應的值和相應的時間值。在引擎蓋下它使用np.putmask

您可以檢查自己這一點:

>>> df = pandas.DataFrame(np.linspace(0.0, 1.0, 10).reshape(5, 2)) 
>>> df[df > 0.5] = -df 
>>> df 
      0   1 
0 0.000000 0.111111 
1 0.222222 0.333333 
2 0.444444 -0.555556 
3 -0.666667 -0.777778 
4 -0.888889 -1.000000 
+0

感謝。我擔心的是,在原始代碼中,cap_level的前N個值將被採用並使用,其中N是布爾掩碼中的True值的數量。但是我們需要cap_level的相應值,而不僅僅是前N個值。原始代碼不會給出相應的值,是嗎? –

+0

@DavidM更正了我的答案,請再看一下。 – ecatmur

+0

非常感謝,也感謝這個例子。 –

相關問題