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

如何计算DataFrame中不同分组内各元素的占比?

问题:按指定分组计算元素占比并生成汇总表

给定数据

原始DataFrame

id  column1   column2   column3   column4    columns5
1      a         b        a          b           x
2      b         a        c          b           y
3      c         b        a          c           x

指定分组

group_1 = ['a', 'b', 'c']
group_2 = ['x', 'y', 'z']

期望输出

%_a        %_b       %_c     %_x        %_y       %_z
0.3333   0.4167     0.25     0.667      0.333      0

计算逻辑

  • group_1元素占比:统计column1到column4中各元素出现次数,除以总元素数(3行×4列=12)
    • a=4/12≈0.3333,b=5/12≈0.4167,c=3/12=0.25
  • group_2元素占比:统计columns5中各元素出现次数,除以总行数(3)
    • x=2/3≈0.667,y=1/3≈0.333,z=0/3=0

解决方案

以下是基于Pandas的实现代码:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'id': [1,2,3],
    'column1': ['a','b','c'],
    'column2': ['b','a','b'],
    'column3': ['a','c','a'],
    'column4': ['b','b','c'],
    'columns5': ['x','y','x']
})

# 处理group_1:计算column1-column4中各元素的占比
group1_cols = ['column1', 'column2', 'column3', 'column4']
# 堆叠多列成一维序列,统计频次,确保包含group_1所有元素(缺失补0)
group1_counts = df[group1_cols].stack().value_counts().reindex(group_1, fill_value=0)
# 计算占比并保留4位小数
group1_ratio = (group1_counts / df[group1_cols].size).round(4)

# 处理group_2:计算columns5中各元素的占比
# 统计频次,确保包含group_2所有元素(缺失补0)
group2_counts = df['columns5'].value_counts().reindex(group_2, fill_value=0)
# 计算占比并保留3位小数
group2_ratio = (group2_counts / len(df)).round(3)

# 合并结果并调整格式
result = pd.concat([group1_ratio, group2_ratio], axis=0)
# 重命名列名,转为行格式
result = result.rename(lambda x: f'%_{x}').to_frame().T

# 调整显示格式,匹配期望输出
result = result.style.format({
    '%_a': '{:.4f}', '%_b': '{:.4f}', '%_c': '{:.4f}',
    '%_x': '{:.3f}', '%_y': '{:.3f}', '%_z': '{:.0f}'
})

# 展示结果
display(result)

代码关键点说明

  1. stack():将column1到column4的多列数据转为一维序列,方便统一统计所有元素的出现次数。
  2. reindex():确保分组中所有元素都被纳入统计,未出现的元素频次补0。
  3. 占比计算:group_1用总元素数(列数×行数)做分母,group_2用总行数做分母,完全匹配给定的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22