我制作了一个数据帧,其结构与以下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
的旁边等等。
答案 0 :(得分:1)
您可以使用GroupBy.transform
和DataFrame.set_index
和DataFrame.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