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

使用Pandas计算每位人员各类水果的占比

计算每位人员各类水果的占比(Pandas实现方法)

先构造你提供的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    '人员': ['A', 'A', 'A', 'B', 'C', 'A', 'F', 'D'],
    '水果': ['苹果', '香蕉', '香蕉', '苹果', '香蕉', '苹果', '香蕉', '香蕉']
})

方法一:长表格式输出(直观展示每个人员-水果的占比)

利用groupby结合value_counts的normalize参数直接计算比例:

# 按人员分组,计算组内各水果的占比,转百分比并保留两位小数
result = df.groupby('人员')['水果'].value_counts(normalize=True).mul(100).round(2).reset_index(name='占比(%)')
print(result)

输出结果:

人员  水果  占比(%)
0  A  苹果   50.00
1  A  香蕉   50.00
2  B  苹果  100.00
3  C  香蕉  100.00
4  D  香蕉  100.00
5  F  香蕉  100.00

方法二:宽表格式输出(适合对比同一人员的不同水果占比)

用crosstab生成计数表后,按行计算占比:

# 生成人员-水果的计数交叉表
counts = pd.crosstab(df['人员'], df['水果'])
# 每行(人员)的水果数量除以该行总数,转百分比并保留两位小数,缺失值填0
percentage = counts.div(counts.sum(axis=1), axis=0).mul(100).round(2).fillna(0)
print(percentage)

输出结果:

水果    苹果     香蕉
人员             
A    50.00   50.00
B   100.00    0.00
C     0.00  100.00
D     0.00  100.00
F     0.00  100.00

关键逻辑说明

  • value_counts(normalize=True):返回分组内各元素的占比(0-1之间的小数)
  • div(counts.sum(axis=1), axis=0):让每行的每个数值除以该行的总和,得到该行内各元素的占比
  • mul(100):将比例转换为百分比格式
  • round(2):保留两位小数,可根据需求调整位数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:15:35