为了账号安全,请及时绑定邮箱和手机立即绑定

获取基于另一列但具有不同类别的列的百分比

获取基于另一列但具有不同类别的列的百分比

MMMHUHU 2021-06-21 12:50:14
我有以下熊猫系列:                    CountPclass  Survived    1       0            80        1           1362       0            97        1            873       0           372        1           119但我想要这样的东西:                    Count   PercentagePclass  Survived       1       0           80      37.0        1           136     63.02       0           97      52.7        1           87      47.33       0           372     75.8        1           119     24.2我想仅根据 Pclass 的每个类别中的计数(而不是计数的总和)来计算百分比。如果仅使用 Count 列计算这些百分比,那就太好了。到目前为止,我所做的是根据 Pclass 总结计数并使用 .repeat() 复制值并尝试将其连接到原始系列,但失败了。        CountPclass  1       2161       2162       1842       1843       4913       491我的想法是使用这个重复列作为计算百分比的分母,如下所示:80 / 216 * 100 = 37.0%然后在计算百分比后删除重复列。看起来很简单,但我似乎无法让它发挥作用。任何帮助表示赞赏。
查看完整描述

3 回答

?
慕工程0101907

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


查看完整回答
反对 回复 2021-06-29
?
慕无忌1623718

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_sparseFalse能够验证重复值:

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


查看完整回答
反对 回复 2021-06-29
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

您正在处理泰坦尼克号数据集。您还可以对原始数据(而不是上面的系列)执行以下操作:

df.Survived.groupby(df.Pclass).value_counts(normalize=True)*100

它将以百分比而不是实际数量为您提供每个班级的计数。


查看完整回答
反对 回复 2021-06-29
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号