所以我有一个满是股票行情的数据框架。他们是MultiIndexed by ticker,然后是date。我想要做的是,只对该数据子集的一个指标列进行标准化。例如,我想让A只根据滚动报价器A对ind1的滚动Zscore上的数据进行标准化,然后对报价器B进行同样的标准化,以此类推。我能够迭代地将这种标准化应用于数据帧的切片,但我正在寻找一种方法来轻松地应用这种滚动标准化,而不是按滚动条切片。
这是我正在使用的Zscore规范化,但我希望将其应用于数据帧中的每个节拍器子集,而无需切片,然后重新附加到新的数据帧。
df['normalizedInd1'] = (df['ind1'] - df['ind1'].rolling(30).mean()) / df['ind1'].rolling(30).std()这是数据帧结构的一个示例
secid ind1 ind2
ticker date
A 2011-01-03 101149.0 100792.5533 177960.0
2011-01-04 101149.0 127658.3339 304624.0
2011-01-05 101149.0 122648.9491 77050.0
B 2011-01-06 101150.0 110161.8415 151825.0
2011-01-10 101150.0 112800.4117 378804.0
2011-01-11 101150.0 79074.8645 525628.0发布于 2020-12-21 15:12:53
您可以尝试使用level=0或ticker来.groupby索引的第一列吗?然后,使用.groupby object g按组进行计算。我已从rolling(30)更改为rolling(2),因此会有以下输出:
g = df.groupby(level=0)['ind1'].rolling(2)
df['normalizedInd1'] = (df['ind1'] - g.mean().droplevel(0)) / g.std().droplevel(0)
df
Out[1]:
secid ind1 ind2 normalizedInd1
ticker date
A 2011-01-03 101149.0 100792.5533 177960.0 NaN
2011-01-04 101149.0 127658.3339 304624.0 0.707107
2011-01-05 101149.0 122648.9491 77050.0 -0.707107
B 2011-01-06 101150.0 110161.8415 151825.0 NaN
2011-01-10 101150.0 112800.4117 378804.0 0.707107
2011-01-11 101150.0 79074.8645 525628.0 -0.707107https://stackoverflow.com/questions/65388575
复制相似问题