You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DataFrame生成目标百分比列并保留计数列

解决方案

你的问题出在计算百分比时的分组维度错误——你按Attrition、Gender、JobSatisfaction三个字段分组,导致每个小组的总和就是自身的count,所以百分比全为100%。正确的做法是按Attrition和Gender分组,计算每个JobSatisfaction在对应分组内的占比。

修正后的代码如下:

# 筛选需要的列(注意列名拼写:原DataFrame是JobSatisfaction,不是Job_Satisfaction)
df1 = df[['Attrition', 'Gender', 'JobSatisfaction']]
# 分组统计各JobSatisfaction的计数
df1 = df1.groupby(['Attrition', 'Gender'])['JobSatisfaction'].value_counts().reset_index(name='count')
# 按Attrition+Gender分组计算总计数,再求占比
df1['%'] = 100 * df1['count'] / df1.groupby(['Attrition', 'Gender'])['count'].transform('sum')
# 格式化百分比,保留两位小数(可选,让结果更清晰)
df1['%'] = df1['%'].round(2)
# 按指定字段排序
df1 = df1.sort_values(by=['Gender', 'Attrition', 'JobSatisfaction'])
df1

关键修正点:

  • 修正列名拼写错误:原代码中Job_Satisfaction是笔误,对应原DataFrame的JobSatisfaction
  • 调整百分比计算的分组维度:改为按['Attrition','Gender']分组,transform('sum')会得到每个性别+离职状态组合的总人数,用当前行的count除以这个总和,就能得到该JobSatisfaction在对应分组内的占比
  • 可选的round(2)可以让百分比保留两位小数,和你期望的结果格式一致

内容的提问来源于stack exchange,提问作者WF30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:01:04