大熊猫回归零点的滚动标准差

问题描述 投票:0回答:1

有没有人在滚动标准偏差方面遇到问题,这些偏差不仅仅适用于pandas数据帧中的一个列?

我有一个带有日期时间索引和相关财务数据的数据框。当我运行df.rolling()。std()(伪代码,请参见下面的实际代码)时,我得到除了一列之外的所有列的正确数据。该列返回0,其中应该有标准偏差值。我在使用.rolling_std()时也会遇到同样的错误,当我尝试运行df.rolling()时会出现错误.skew(),所有其他列都有效,此列给出了NaN。

关于这个错误让我失望的是其他列正常工作,对于这个列,df.rolling()。mean()有效。另外,该列有dtype float64,这应该不是问题。我也检查过,看不到丢失的数据。我正在使用30天的滚动窗口,如果我尝试使用系列[-30:]。std()来获取最后一个标准偏差值,我得到了正确的结果。所以看起来特别关于滚动部分的东西是行不通的。我玩了.rolling()的参数,但无法改变任何东西。

# combine the return, volume and slope data
raw_factor_data = pd.concat([fut_rets, vol_factors, slope_factors], axis=1)

# create new dataframe for each factor type (mean,
# std dev, skew) and combine
mean_vals = raw_factor_data.rolling(window=past, min_periods=past).mean()
mean_vals.columns = [column + '_mean' for column in list(mean_vals)]

std_vals = raw_factor_data.rolling(window=past, min_periods=past).std()
std_vals.columns = [column + '_std' for column in list(std_vals)]

skew_vals = raw_factor_data.rolling(window=past, min_periods=past).skew()
skew_vals.columns = [column + '_skew' for column in list(skew_vals)]

fact_data = pd.concat([mean_vals, std_vals, skew_vals], axis=1)

第一行将三个数据帧组合在一起。然后我创建具有滚动均值,标准和偏斜(过去= 30)的单独数据帧,然后将它们组合成单个数据帧。

我遇到问题的列的名称是'TY1_slope'。所以我按如下方式运行了一些代码,看看哪里有错误。

print raw_factor_data['TY1_slope'][-30:].std()
print raw_factor_data['TY1_slope'][-30:].mean()

print raw_factor_data['TY1_slope'].rolling(window=30, min_periods=30).std()
print raw_factor_data['TY1_slope'].rolling(window=30, min_periods=30).mean()

前两行代码输出正确的标准偏差和平均值(.08和.14)。但是,第三行代码产生零,但第四行产生精确的平均值(这些系列中的最终值为0.0和.14)。

如果有人可以帮助我们查看有用的.rolling源代码。我是新手,并尝试了以下,但只是有几行似乎没有帮助。

import inspect
import pandas as pd
print inspect.getsourcelines(pd.rolling_std)
python pandas dataframe standard-deviation rolling-computation
1个回答
0
投票

引用JohnE的评论,因为它起作用(虽然仍然不确定问题的根本原因)。 JohnE,随意改变答案,我会投票。

在黑暗中拍摄,但你可以尝试滚动(30).apply(lambda x:np.std(x,ddof = 1))万一它是滚动+标准的一些奇怪的语法错误 - JohnE

© www.soinside.com 2019 - 2024. All rights reserved.