将多索引列添加到数据框

时间:2020-10-28 11:41:37

标签: python-3.x pandas

我制作了一个数据帧,其结构与以下df

类似

#                          val_1  val_2
# level_1 level_2 level_3              
# A0      B0      C0          98     90
#                 C1          44      9
#         B1      C2          39     17
#                 C3          75     71
# A1      B2      C0           1     89
#                 C1          54     60
#         B3      C2          47      6
#                 C3          16      5
# A2      B0      C0          75     22
#                 C1          19      4
#         B1      C2          25     52
#                 C3          57     40
# A3      B2      C0          64     54
#                 C1          27     96
#         B3      C2         100     77
#                 C3          22     50

我想在level_1的右边添加一列,其值是A的每个子df的val_1的总和。因此,98 + 44 + 39 + 75被添加到A0的旁边等等。

1 个答案:

答案 0 :(得分:1)

您可以使用GroupBy.transformDataFrame.set_indexDataFrame.reorder_levels来新建一列:

df['new'] = df.groupby(level=0)['val_1'].transform('sum')
df = df.set_index('new', append=True).reorder_levels([0,3,1,2])

print (df)
                             val_1  val_2
level_1 new level_2 level_3              
A0      256 B0      C0          98     90
                    C1          44      9
            B1      C2          39     17
                    C3          75     71
A1      118 B2      C0           1     89
                    C1          54     60
            B3      C2          47      6
                    C3          16      5
A2      176 B0      C0          75     22
                    C1          19      4
            B1      C2          25     52
                    C3          57     40
A3      213 B2      C0          64     54
                    C1          27     96
            B3      C2         100     77
            B2      C3          22     50