3 回答

TA贡献1887条经验 获得超5个赞
div并sum与level=0
df.assign(Pct=df.div(df.sum(level=0), level=0).round(2) * 100)
Count Pct
Pclass Survived
1 0 80 37.0
1 136 63.0
2 0 97 53.0
1 87 47.0
3 0 372 76.0
1 119 24.0

TA贡献1744条经验 获得超4个赞
使用GroupBy.transform
退货Series
与相同尺寸的原DataFrame
,通过分频div
,多用mul
,如有必要round
:
#if input is Series create one column DataFrame
df = s.to_frame('Count')
s = df.groupby('Pclass')['Count'].transform('sum')
#if use oldier pandas version
#s = df.groupby(level='Pclass')['Count'].transform('sum')
df['Percentage'] = df['Count'].div(s).mul(100).round()
print (df)
Count Percentage
Pclass Survived
1 0 80 37.0
1 136 63.0
2 0 97 53.0
1 87 47.0
3 0 372 76.0
1 119 24.0
编辑:
您不必在 PClass 上转发填充吗?
这是没有必要的,因为在多指标默认中未示出,但如果设定multi_sparse
到False
能够验证重复值:
with pd.option_context('display.multi_sparse', False):
print (df)
Count
Pclass Survived
1 0 80
1 1 136
2 0 97
2 1 87
3 0 372
3 1 119

TA贡献1815条经验 获得超6个赞
您正在处理泰坦尼克号数据集。您还可以对原始数据(而不是上面的系列)执行以下操作:
df.Survived.groupby(df.Pclass).value_counts(normalize=True)*100
它将以百分比而不是实际数量为您提供每个班级的计数。
添加回答
举报