组的累积标准偏差

时间:2019-01-27 09:17:47

标签: pandas

如何计算长度不同的组的累积标准偏差?

import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'foo',
                             'foo', 'bar', 'foo', 'foo'],
                       'B': ['one', 'one', 'two', 'three',
                             'two', 'two', 'one', 'three'],
                       'C': np.random.randn(8),
                       'D': np.random.randn(8)})

df.groupby('A')['B'].nunique()给出bar:2,foo:3

...但是...

df.groupby('A')['C', 'D'].rolling(df.groupby('A')['B'].nunique(), min_periods=2).std()

...给予...

  

ValueError:窗口必须为整数

1 个答案:

答案 0 :(得分:2)

我认为您可以使用expanding(自Pandas 0.18起新增)来获得一个滚动窗口,该窗口会随着组的大小而扩展,首先添加B作为索引并进行排序:

df.set_index('B').sort_index().groupby(['A'])['C', 'D'].expanding(2).std()

                  C            D
A        B      
bar     one     NaN           NaN
        two     0.174318    0.039794
foo     one     NaN           NaN
        one     1.395085    1.364566
        three   1.010592    1.029694
        three   0.986744    0.957615
        two     0.854773    0.876763
        two     1.048024    0.807519