与 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
不知道你能否帮我找到解决以下问题的方法。给定这样的数据框 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 字典
在行上聚合 df2g3=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