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

如何在pandas中计算多列数据占分组小计的百分比?

报错原因

x.sum()返回的是包含sales、cost两列求和结果的Series对象,不是单个数值,无法直接转换为float类型,因此触发类型错误。

修复方案

写法1:修改原apply逻辑

删除多余的float()转换,pandas会自动按列对齐做除法运算:

import numpy as np
import pandas as pd
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3, 'office_id': list(range(1, 7)) * 2, 'sales': [np.random.randint(100000, 999999) for _ in range(12)],
                   'cost': [np.random.randint(1000, 9999)  for _ in range(12)]})
state_office = df.groupby(['state', 'office_id']).agg({'sales': 'sum', 'cost': 'sum'})
# 仅修改这一行,去掉float()转换即可
state_pcts = state_office.groupby(level=0).apply(lambda x: 100 * x / x.sum())

写法2:更高效的transform实现

用groupby.transform直接生成和原数据同结构的分组求和结果,运算性能比apply更高:

state_pcts = 100 * state_office / state_office.groupby(level=0).transform('sum')
结果验证

执行state_pcts.groupby(level=0).sum()可以看到每个state分组下的sales、cost列求和结果均为100,符合占比计算预期。

内容的提问来源于stack exchange,提问作者Y.M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:06:01