Pandas分组按条件计算列占比:补充汇总分类h、i的销售占比
实现方案
你已有的代码已经正确完成了a-g类别的销售占比计算,剩下的h、i汇总项可以通过以下步骤补充计算:
步骤1:运行原有代码完成a-g占比计算
cats = ['a','b','c','d','e','f','g'] df['% Sales Mix'] = (df['Sales'] / df[df.category.isin(cats)].groupby(['level_0'])['Sales'].transform('sum')) * 100
步骤2:补充计算h、i的占比
实现逻辑
- 所有i行的
% Sales Mix直接赋值为100 - 提取每个
level_0分组下i对应的销售额作为分母,计算同分组下h的销售占比
代码实现
# 提取每个分组对应的i的总销售额 group_i_sales = df[df['category'] == 'i = sum([g-h])'].groupby('level_0')['Sales'].first().to_dict() # 赋值i的占比为100% df.loc[df['category'] == 'i = sum([g-h])', '% Sales Mix'] = 100 # 计算h的占比 df.loc[df['category'] == 'h = sum([a-f])', '% Sales Mix'] = df.apply( lambda row: (row['Sales'] / group_i_sales[row['level_0']]) * 100, axis=1 ) # 可选:如果需要和示例一致保留整数占比,加一步取整 df['% Sales Mix'] = df['% Sales Mix'].round(0).astype('Int64')
如果category命名存在不固定的情况,可以把精确匹配替换为模糊匹配:把df['category'] == 'xxx'替换为df['category'].str.startswith('i')/df['category'].str.startswith('h')即可。
内容的提问来源于stack exchange,提问作者Jonas Palačionis
相关产品推荐
相关产品推荐

