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

Pandas分箱分组后计算子组内各行占小计百分比的问题

解决方法

问题根因

  • 百分比计算的分组层级错误:原代码按barrio一级索引求和作为分母,得到的是每行占对应barrio全部数据的比例,而预期是占barrio + fuente二级子组的比例。
  • 分组计数后未补全不存在的(barrio, fuente, bins)组合,导致层级展示错位、缺失0值行。

修正后完整代码

import pandas as pd
import numpy as np

data = pd.DataFrame({'barrio':['Almagro','Palermo','Almagro','Almagro','Palermo','Palermo','Almagro','Almagro'],
                     'fuente':['A','A','B','B','B','A','B','A'], 
                     'valor':[1,6,5,3,5,10,8,4]})

bins = np.arange(0,data['valor'].max() + 1, 2)
labels = ['-'.join(map(str,(x,y))) for x, y in zip(bins[:-1], bins[1:])]
data['bins'] = pd.cut(data['valor'], bins=bins,labels = labels, include_lowest=True)

# 分组计数
data_count = data.groupby(['barrio','fuente','bins']).agg({'valor':'count'})

# 补全所有层级组合,缺失值填充为0
all_index = pd.MultiIndex.from_product(
    [data['barrio'].unique(), data['fuente'].unique(), labels],
    names=['barrio', 'fuente', 'bins']
)
data_count = data_count.reindex(all_index, fill_value=0)

# 按barrio + fuente二级子组计算百分比
data_result = data_count.groupby(level=[0,1]).apply(lambda x: round(100 * x / x.sum(), 2))

print(data_result)

运行上述代码即可得到符合预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:05