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
相关产品推荐
相关产品推荐

