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

如何在Python Pandas中对多数据点的单元格值重算百分比至总和100%?

解决Pandas中产品门店加权百分比归一化问题

嘿,我懂你查了半天没找到简洁实现的困扰😆——其实这个需求用Pandas的分组和transform功能就能轻松搞定,咱们一步步拆解来做:

核心思路

你需要的是三个关键步骤:

  • 计算每个产品-门店组合的加权得分(可用性 × 门店重要性)
  • 按产品分组,计算每组的加权得分总和
  • 将每个门店的加权得分除以组总和,再乘以100得到占比(保证每组总和为100%)

示例代码实现

先构造一个和你场景匹配的示例数据集,方便你对照理解:

import pandas as pd

# 模拟你的产品-门店数据
data = {
    '产品': ['A', 'A', 'A', 'A', 'B', 'B', 'B'],
    '门店': ['食品店', '药店', 'Target', 'Walmart', '食品店', '药店', 'Walmart'],
    '可用性': [1, 1, 0, 1, 1, 0, 1],  # 1表示可用,0表示不可用
    '门店重要性': [0.2, 0.3, 0.1, 0.4, 0.25, 0.35, 0.4]  # 0-1之间的权重值
}
df = pd.DataFrame(data)

第一步:计算加权得分

先给每一行计算可用性 × 门店重要性的结果:

df['加权得分'] = df['可用性'] * df['门店重要性']

第二步:按产品分组计算总和

用transform方法把每组的加权总分映射回原数据的每一行,这样后续可以直接计算占比:

df['产品加权总分'] = df.groupby('产品')['加权得分'].transform('sum')

第三步:归一化到100%

最后计算每个门店的占比,同时处理可能的除以0情况(比如某个产品所有门店都不可用):

# 计算百分比,并用fillna处理总分为0的情况
df['最终百分比'] = (df['加权得分'] / df['产品加权总分']) * 100
df['最终百分比'] = df['最终百分比'].fillna(0)

最终结果示例

运行完上面的代码后,你的数据框会变成这样(保留两位小数):

产品门店可用性门店重要性加权得分产品加权总分最终百分比
A食品店10.20.20.922.22
A药店10.30.30.933.33
ATarget00.10.00.90.00
AWalmart10.40.40.944.44
B食品店10.250.250.6538.46
B药店00.350.00.650.00
BWalmart10.40.40.6561.54

可以看到每个产品的最终百分比列总和都是100%,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:50