Чтобы использовать pd.expanding
в столбце VALUE
, сначала необходимо перевернуть кадр данных и рассчитать смещенную дисперсию расширения:
variance = df['VALUE'].iloc[::-1].expanding(
).var().shift().iloc[::-1].rename('VARIANCE')
>> variance
Index
1 3.200000
2 4.250000
3 5.333333
4 8.000000
5 NaN
6 NaN
Name: VARIANCE, dtype: float64
Несколько групп
Давайте создадим новый df со значениями для каждой группы:
>> df
GROUP DATE VALUE
Index
1 g1 2015-12-02 10
2 g1 2015-10-12 9
3 g1 2013-12-13 8
4 g1 2013-12-13 11
5 g1 2013-07-15 7
6 g1 2015-12-02 11
1 g2 2015-12-02 10
2 g2 2015-10-12 9
3 g2 2013-12-13 8
4 g2 2013-12-13 11
5 g2 2013-07-15 7
6 g2 2015-12-02 11
Для нескольких групп вы можете перебирать по группам и сохранять результаты.
variance = []
for name, group in df.groupby('GROUP'):
variance.append(group['VALUE'].iloc[::-1].expanding(
).var().shift().iloc[::-1])
>> df.assign(VARIANCE=pd.concat(variance))
GROUP DATE VALUE VARIANCE
Index
1 g1 2015-12-02 10 3.200000
2 g1 2015-10-12 9 4.250000
3 g1 2013-12-13 8 5.333333
4 g1 2013-12-13 11 8.000000
5 g1 2013-07-15 7 NaN
6 g1 2015-12-02 11 NaN
1 g2 2015-12-02 10 3.200000
2 g2 2015-10-12 9 4.250000
3 g2 2013-12-13 8 5.333333
4 g2 2013-12-13 11 8.000000
5 g2 2013-07-15 7 NaN
6 g2 2015-12-02 11 NaN