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

Pandas1.3+ sum的level参数废弃,如何用groupby实现层级占比计算

兼容高版本Pandas的修改方案

直接替换原有计算占比的代码行即可,运行结果和原有逻辑完全一致,无FutureWarning告警。

完整修改后代码

import pandas as pd

data = [['product1',  'product1a', 'product1aa', 10],
        ['product1',  'product1a', 'product1aa', 5],
        ['product1',  'product1a', 'product1aa', 15],
        ['product1',  'product1a', 'product1ab', 10],
        ['product1',  'product1a', 'product1ac', 20],
        ['product1', 'product1b', 'product1ba', 15],
        ['product1', 'product1b', 'product1bb',15],
        ['product2', 'product2_a', 'product2_aa', 30]] 

df = pd.DataFrame(data, columns = ["Product_level1", "Product_Level2", "Product_Level3", "Qty"])
    
prod_levels = ["Product_level1", "Product_Level2", "Product_Level3"]
    
df = df.groupby(prod_levels).sum("Qty")
            
# 仅修改这一行,用groupby指定层级聚合替代废弃的level参数
df["Qty ratio"] = df["Qty"] / df["Qty"].groupby(level=prod_levels[:-1]).sum()

print(df)

修改说明

  • 原告警触发原因是sum()方法的level参数从Pandas1.3版本开始标记废弃,统一改用groupby指定层级实现多索引聚合
  • prod_levels[:-1]对应三级层级中的前两级(一级分类、二级分类),按这两个维度分组求和得到每个二级分类的总销量,和原sum(level=prod_levels[-2])的计算逻辑完全等价
  • Pandas会自动按多索引的前两级对齐分子分母,计算得到每个三级产品对应所属二级分类的销量占比

输出结果验证

运行后输出和原有逻辑完全一致:

Qty  Qty ratio
Product_level1 Product_Level2 Product_Level3                    
product1       product1a      product1aa       30        0.5
                              product1ab       10        0.166667
                              product1ac       20        0.333333
               product1b      product1ba       15        0.5
                              product1bb       15        0.5
product2       product2_a     product2_aa      30        1.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:39:03