2015-03-30 86 views
0

我有一个数据框,其中索引是时间,但每行数据不是同质的w.r.t.时间如下:熊猫:添加“对角”

    obs_TQ  obs_PQ  
year quarter       
1 1  5499.330651 1655.414960 
    2  4650.849431 1807.889632 
    3  5417.065129 3352.855656 
    4  7771.021167 2343.369804 

其中obs_TQ是本季度的观察,obs_PQ是过去一个季度的观察。我想总结一下按季度观察,因此结果按季度将是

        real_obs 
year quarter 
    1  1  obs_TQ[1,1] + obs_PQ[1,2] 
    1  2  obs_TQ[1,2] + obs_PQ[1,3] 

也就是说,对于每一行,我需要从该行从下一行添加obs_TQobs_PQ

     real_obs 
year quarter 
    1  1  7307.220283 
    1  2  8003.705087 

是否有任何有效的矢量化的方式来做到这一点?按索引分组不会在这里工作,因为我需要结合来自不同组的数据,而且我没有真正意识到我可以在此上下文中使用任何其他工具。

回答

2

除非我错过了一些东西,难道你只是将TQ添加到移位的PQ?

>>> (df["obs_TQ"] + df["obs_PQ"].shift(-1)).to_frame("real_obs") 
       real_obs 
year quarter    
1 1  7307.220283 
    2  8003.705087 
    3  7760.434933 
    4    NaN 
+0

如果我有第三个子索引,如'输入[0,1]',该怎么办?确保它的一种方法是预先选择'df.query(“type == i”)* *来执行你的命令,并遍历所有'i'。我可以把它加入'shift()'吗? – FooBar 2015-04-02 18:29:14