2015-03-30 4 views
0

У меня есть кадр данных, где индекс - это время, но данные в строке не являются однородными w.r.t. время, а именно:Pandas: добавление «по диагонали»

    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_TQ из этой строки в obs_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

Что делать, если у меня есть третий субиндекс, например 'type in [0, 1]'. Один из способов гарантировать, что это будет предварительный выбор 'df.query (" type == i ")' * before * для выполнения вашей команды и повторение всех 'i'. Могу ли я включить это в 'shift()'? – FooBar

Смежные вопросы