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)
数据源:
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)