Создайте сгруппированный столбец по сумме другого столбца с помощью pandas

#python #pandas #pandas-groupby

#python #pandas #pandas-groupby

Вопрос:

У меня есть этот набор данных:

  === ======= ====== ======= ======= 
|   | Group | Cost | Name1 | Name2 |
 === ======= ====== ======= ======= 
| 0 | G1    | 1574 | N1A   | N2A   |
 --- ------- ------ ------- ------- 
| 1 | G2    | 1322 | N1B   | N2B   |
 --- ------- ------ ------- ------- 
| 2 | G3    | 1188 | N1C   | N2C   |
 --- ------- ------ ------- ------- 
| 3 | G3    |  942 | N1D   | N2D   |
 --- ------- ------ ------- ------- 
| 4 | G4    |  838 | N1E   | N2E   |
 --- ------- ------ ------- ------- 
| 5 | G5    |    5 | N1F   | N2F   |
 --- ------- ------ ------- ------- 
| 6 | G5    |    4 | N1F   | N2G   |
 --- ------- ------ ------- ------- 
| 7 | G5    |    3 | N1G   | N2H   |
 --- ------- ------ ------- ------- 
  

Теперь я хочу сгруппировать по «Группе» и добавить сгруппированный столбец с суммой столбцов «Стоимость» для каждой группы. Не знаю, как объяснить, так что вот ожидаемый результат:

  === ======= ====== ====== ======= ======= 
|   | Group | Sum  | Cost | Name1 | Name2 |
 === ======= ====== ====== ======= ======= 
| 0 | G1    | 1574 | 1574 | N1A   | N2A   |
 --- ------- ------ ------ ------- ------- 
| 1 | G2    | 1322 | 1322 | N1B   | N2B   |
 --- ------- ------ ------ ------- ------- 
| 2 | G3    | 2130 | 1188 | N1C   | N2C   |
|   |       |       ------ ------- ------- 
|   |       |      |  942 | N1D   | N2D   |
 --- ------- ------ ------ ------- ------- 
| 3 | G4    |  838 |  838 | N1E   | N2E   |
 --- ------- ------ ------ ------- ------- 
| 4 | G5    |   12 |    5 | N1F   | N2F   |
|   |       |       ------ ------- ------- 
|   |       |      |    4 | N1F   | N2G   |
|   |       |       ------ ------- ------- 
|   |       |      |    3 | N1G   | N2H   |
 --- ------- ------ ------ ------- ------- 
  

Как я могу добиться этого с помощью pandas? Возможно ли это вообще? Извините, я новичок в этом

Комментарии:

1. Pandas не имеет понятия merged cells as в Excel. Вы можете использовать MultiIndex для получения визуального эффекта.

Ответ №1:

Используйте GroupBy.transform with sum , а затем для отображения вашего способа create MultiIndex by DataFrame.set_index , но 'missing' значения в MulitIndex только не отображаются:

 df['Sum'] = df.groupby('Group')['Cost'].transform('sum')
df = df.set_index(['Group','Sum','Cost'])
  

Или:

 df1 = (df.assign(Sum = df.groupby('Group')['Cost'].transform('sum'))
         .set_index(['Group','Sum','Cost']))