Как суммировать одну строку для нескольких строк в pandas кадре данных с помощью мультииндекса? - PullRequest
2 голосов
/ 28 мая 2020

Мой фрейм данных с кварталом и неделей как MultiIndex:

Quarter   Week      X   Y   Z
Q1        Q1-W01    1   1   1
          Q1-W02    2   2   2
          Q1-W03    3   3   3
          Q1-W04    4   4   4
Q2        Q2-W15    15  15  15
          Q2-W16    16  16  16
          Q2-W17    17  17  17
          Q2-W18    18  18  18

Я пытаюсь добавить последнюю строку в Q1 (Q1-W04) ко всем строкам в Q2 (Q2-W15 по Q2-W18 ). Вот как я бы хотел, чтобы фрейм данных выглядел:

Quarter   Week      X   Y   Z
Q1        Q1-W01    1   1   1
          Q1-W02    2   2   2
          Q1-W03    3   3   3
          Q1-W04    4   4   4
Q2        Q2-W15    19  19  19
          Q2-W16    20  20  20
          Q2-W17    21  21  21
          Q2-W18    22  22  22

Когда я пытаюсь указать только индекс уровня 0 и суммировать заданную строку c, все значения Q2 go превращаются в NaN.

df.loc['Q2'] += df.loc['Q1','Q1-W04'] 

Quarter   Week      X   Y   Z
Q1        Q1-W01    1   1   1
          Q1-W02    2   2   2
          Q1-W03    3   3   3
          Q1-W04    4   4   4
Q2        Q2-W15    NaN NaN NaN
          Q2-W16    NaN NaN NaN
          Q2-W17    NaN NaN NaN
          Q2-W18    NaN NaN NaN

Я понял, что если я укажу как индекс уровня 0, так и индекс уровня 1, проблем не возникнет.

df.loc['Q2','Q2-W15'] += df.loc['Q1','Q1-W04']

Quarter   Week      X   Y   Z
Q1        Q1-W01    1   1   1
          Q1-W02    2   2   2
          Q1-W03    3   3   3
          Q1-W04    4   4   4
Q2        Q2-W15    19  19  19
          Q2-W16    16  16  16
          Q2-W17    17  17  17
          Q2-W18    18  18  18

Есть ли способ суммировать определенную строку c со всеми строками в пределах индекса Q2 уровня 0 без необходимости вызывать каждую строку индивидуально по ее индексу уровня 1?

Любое понимание / руководство будет очень признательно.

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

попробуйте это

df.loc['Q2'] = (df.loc['Q2'] + df.loc['Q1', 'Q1-W04']).values.tolist()

df.lo c возвращает DataFrame, чтобы установить значение, которое он ищет для списка или массива. Отсюда и вышесказанное.

0 голосов
/ 28 мая 2020

В вашем случае мы должны убрать влияние index

df.loc['Q2','Q2-W15'] += df.loc['Q1','Q1-W04'].values
...