Pandas 根据一列的值groupby agg

Pandas groupby agg according to one column's values

数据源:


    Name    Country Height
0   Ben     UK  170
1   Bob     UK  159
2   Alice   UK  182
3   Craig   UK  172
4   Steve   UK  166
5   Jobs    UK  166
6   Jams    ZA  153
7   Tommy   ZA  176
8   Jacab   ZA  190

目标:

尝试过:

h_range_labels=["150-159", "160-169", "170-179", "180-190"]
h_range=[150,160,170,180,190]
source.groupby(pd.cut(source["Height"], h_range, labels=h_range_labels)).agg({"Name":"count"}).cumsum()

如何完成上图的目标?

----------------更新问题--------------------

目标2:如何显示为行百分比之和?

Country      UK      ZA
Height            
[150, 160)   16.67%   33.33%
[160, 170)   33.33%   0
[170, 180)   33.33%   33.33%
[180, 191)   16.67%   33.33%

试试这个:

df = df.groupby([pd.cut(df['Height'],bins = [150,160,170,180,191],right = False),'Country']).size().unstack()

输出:

Country     UK  ZA
Height            
[150, 160)   1   1
[160, 170)   2   0
[170, 180)   2   1
[180, 191)   1   1

请获取您的额外输出,可以使用以下内容:

df.div(df.sum(),axis=1).mul(100).applymap('{:.2f}%'.format)