我正在尝试在pandas
中为Python运行Winsorized回归。 very helpful user manual提供了此示例代码:
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数据框,并希望确保我理解正确。
答案 0 :(得分: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