我有以下熊猫系列:
Count
Pclass Survived
1 0 80
1 136
2 0 97
1 87
3 0 372
1 119
但是我想要这样的东西:
Count Percentage
Pclass Survived
1 0 80 37.0
1 136 63.0
2 0 97 52.7
1 87 47.3
3 0 372 75.8
1 119 24.2
我只想根据每个中的计数来计算百分比 Pclass的类别(不是总数的总和)。如果这些很好 百分比仅使用“计数”列计算。
到目前为止,我所做的是我根据Pclass总结了计数,并使用.repeat()复制值,并尝试将其连接到原始Series,但失败了。
Count
Pclass
1 216
1 216
2 184
2 184
3 491
3 491
我的想法是使用此重复列作为计算百分比的分母,如下所示:
80 / 216 * 100 = 37.0%
,然后在计算百分比之后删除重复列。似乎很简单,但我似乎无法使其正常工作。任何帮助表示赞赏。
答案 0 :(得分:4)
使用GroupBy.transform
返回5
,其大小与原始Series
相同,除以div
,再除以mul
,并在必要时使用round
:
DataFrame
编辑:
您不必向前填写PClass吗?
这不是必需的,因为未显示MultiIndex中的默认值,但是如果将#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
设置为multi_sparse
是可能的,请验证重复值:
False
答案 1 :(得分:3)
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
答案 2 :(得分:0)
您正在处理钛酸数据集。您还可以像下面那样对原始数据(而不是上面的系列)进行操作:
df.Survived.groupby(df.Pclass).value_counts(normalize=True)*100
它将以百分比而不是实际数量为您提供每个班级的计数。