首页 > 解决方案 > Pandas 按多列分组并按行获取输出

问题描述

我有一个场景,我有一个数据框,例如:

自由度:


         a  b  c  d  e  kmeans
counter 
0        1  1  1  1  1   1
1        0  0  1  0  1   2
2        1  0  1  1  1   3
3        0  1  0  0  0   1
4        0  0  0  1  0   2
5        1  1  0  0  1   2

我想要的输出是:

   1   2   3
a  1   1   0
b  2   1   0
c  1   1   1
d  1   1   1
e  1   2   1

我的原始数据框中有500多列,我希望它们按这些列分组并将它们作为行并将最后一列的行值转换为列。

我正在尝试按以下方式分组:

df.groupby(col[0:-1])['kmeans'].sum() but i get an error

我以前用过groupby,但从来没有遇到过这样的问题。任何帮助将非常感激。

标签: pythonpandasdataframepandas-groupby

解决方案


sum我认为您需要通过聚合kmeans,然后转置并最后删除列名kmeans

df1 = df.groupby('kmeans').sum().T.rename_axis(None, axis=1)
print (df1)
   1  2  3
a  1  1  1
b  2  1  0
c  1  1  1
d  1  1  1
e  1  2  1

或者,如果创建索引kmeanssum由第一级使用,转置并最后删除列mame:

df1 = df.set_index('kmeans').sum(level=0).T.rename_axis(None, axis=1)
print (df1)
   1  2  3
a  1  1  1
b  2  1  0
c  1  1  1
d  1  1  1
e  1  2  1

推荐阅读