在多索引数据帧上运行标准差

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

是否可以在这样的多索引数据帧上计算运行标准差(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
python pandas dataframe
1个回答
2
投票

您可以尝试将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
© www.soinside.com 2019 - 2024. All rights reserved.