3

我正在尝试pandas为 Python 运行 Winsorized 回归。非常有用的用户手册提供了这个示例代码:

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]吗?

谢谢您的帮助!我对使用 Pandas 数据框仍然很陌生,并想确保我理解正确。

4

1 回答 1

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
于 2012-07-02T16:31:03.927 回答