与 grouby 一起旋转?

Pivoting with grouby?

不知道你能否帮我找到解决以下问题的方法。给定这样的数据框 df1

d1={'L':['aaa','bbb','ccc','aaa','bbb','ddd'],
'w':[1,5,9,13,17,21],
'x':[2,6,10,14,18,22],
'y':[3,7,11,15,19,23],
'z':[4,8,12,16,20,24]}
df1=pd.DataFrame(d1)

和两个字典来定义列和行的分组

dctRowGroups={'aaa':'A','bbb':'B','ccc':'A','ddd':'B'}
dctColGroups={'w':'ALPHA','x':'BETA','y':'ALPHA','z':'BETA'}

作为第一步,我想聚合列。正在申请

g2=df1.groupby(dctColGroups,axis=1)
g2.sum()

结果

但我想为下一步的行聚合保留 'L' 列,即结果应该是一个数据帧 df2 更像这样:

我需要编写什么代码才能做到这一点? 下一步,我想使用 dctRowGroups 字典

在行上聚合 df2
g3=df2.groupby(dctRowGroups,axis=0)
g3.sum()

得到这样的最终结果:

我怎样才能用尽可能少的代码行完成所有这些步骤? 感谢您对此的建议。

非常感谢

威尔弗里德。

你可以这样做:

首先创建df2并使用insert()方法插入'L'列:

df2=df1.groupby(dctColGroups,axis=1).sum()

df2.insert(0,'L',df1['L'])  #use this only when the order matters

#OR(use anyone of the method either insert or assign)

df2=df2.assign(L=df1['L'])  #otherwise use this

最后使用assign()map()groupby()方法:

result=df2.assign(L=df2['L'].map(dctRowGroups)).groupby('L').sum()

输出:

df2:

    L   ALPHA   BETA
0   aaa     4   6
1   bbb     12  14
2   ccc     20  22
3   aaa     28  30
4   bbb     36  38
5   ddd     44  46

result:

    ALPHA   BETA
L       
A   52      58
B   92      98