我有一个熊猫-dataframe拥有一个组,日期,价值和方差栏:
Index GROUP DATE VALUE VARIANCE
1 g1 2015-12-02 10 3.2
2 g1 2015-10-12 9 4.25
3 g1 2013-12-13 8 8
4 g1 2013-12-13 11 8
5 g1 2013-07-15 7 NaN
6 g1 2015-12-02 11 NaN
7 g2 ...基本上,我想要计算值列的移位滚动方差。因此,指数1的方差值是指数2-6中数值的方差,等等。
我的第一种方法是使用一个扩展的终结来计算方差并将值移动1,但我不确定这是否是正确的方法。我对每一个建议都感到高兴。
发布于 2018-11-08 18:48:53
要在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发布于 2018-11-12 10:44:40
对每个研究这个问题的人来说。梅贝尔·维拉尔巴的回答为我指明了正确的方向。我相应地改变了她的做法:
variance_r = df[['GROUP','DATE','VALUE']].sort_values(['GROUP','DATE'])
variance = []
for name, group in variance_r.groupby('GROUP'):
variance.append(
group['VALUE'].expanding().var().shift(1).
where(group['DATE'].shift() != group['DATE'],
group['VALUE'].expanding().var().shift(2)
))
variance_r.assign(VARIANCE = pd.concat(variance))https://stackoverflow.com/questions/53213324
复制相似问题