[使用python 3.9]
我有一个大型df,其结构如下:
import pandas as pd
tuples = [('BLOCK', i, j) for i in ['X', 'Y'] for j in ['a', 'b', 'c']]
data = [[1, 1, 1, 1, 1, 2]]
columns = pd.MultiIndex.from_tuples(tuples, names=['top', 'mid', 'bottom'])
df = pd.DataFrame(columns=columns, data=data)
top BLOCK
mid X Y
bottom a b c a b c
0 1 1 1 1 1 2
原始df中有许多这样的块彼此相邻,并且只有底层标签是重复的。
我想对底层的一个子集求和,删除求和后的列,用一个求和后的列替换它们,如下所示:
top BLOCK
mid X Y
bottom a b+c a b+c
0 1 2 1 3
我可以通过进入每一个块和每一个中间层,对列的子集求和,然后重新索引并通过连接再次堆叠所有内容来实现这一点,但我希望有一个更有效的方法。
我想也许df.groupby(level=['top', 'mid'], axis='columns')
与其他东西的组合是一个替代方案,也许通过在特定的组中分别聚合,但还没有找到方法。
1条答案
按热度按时间js81xvg61#
您可以在多索引的底层使用groupby方法,然后对底层中要聚合的子集求和。然后使用reorder_levels和swaplevel将底层移到顶层,将其删除并重命名列。最后,使用unstack将求和列移到DataFrame中的正确位置。
下面是一个例子: