是否可以在这样的多索引数据帧上计算运行标准差(SD)?
Value SD
Symbol Date
ABC 19APR2017 35.43 0.00
20APR2017 28.41 4.96
21APR2017 33.8 3.67
DEF 19APR2017 10 0.00
20APR2017 15 3.54
21APR2017 12 2.52
您可以尝试将df与索引级别0分组,并使用pd.rolling
计算标准差与指定的滚动窗口长度
df.groupby(df.index.get_level_levels(0))['Value'].rolling(2).std()
要么
来自@ayhan输入
df.groupby(level='Symbol')['Value'].rolling(2).std()
编辑
计算列的累积标准偏差
df = df.assign(std=df['Value'].apply(lambda x:[x])).groupby(level='Symbol').apply(lambda x: x.cumsum())
df['std'] = df['std'].apply(lambda x: pd.Series(x).std())
要么
df.groupby(df.index.get_level_levels(0))['Value'].transform(lambda x: [x[:i+1].std() for i in range(len(x))])
日期:
a NaN
b 4.963890
c 3.673994
d NaN
e 3.535534
f 2.516611
Name: val, dtype: float64