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

如何在Python中计算同类别下其他子类别产品的加权平均价格

解决方案

首先构造示例DataFrame:

import pandas as pd

data = {
    'category': ['A', 'A', 'A', 'B', 'B', 'B'],
    'sub category': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3'],
    'price': [100, 110, 120, 90, 100, 95],
    'revenue': [1000, 990, 890, 1200, 1100, 1050]
}
df = pd.DataFrame(data)

接下来按以下步骤计算目标列:

# 计算每个类别下的总营收、总价格营收乘积和
group_stats = df.groupby('category').agg(
    total_revenue=('revenue', 'sum'),
    total_price_revenue=('price', lambda x: (x * df.loc[x.index, 'revenue']).sum())
)

# 将分组统计结果合并回原表
df = df.merge(group_stats, on='category', how='left')

# 计算排除当前子类别的加权平均价格
df['weighted_avg_excl_current'] = (df['total_price_revenue'] - df['price'] * df['revenue']) / (df['total_revenue'] - df['revenue'])

# 可选:删除中间计算列
df = df.drop(['total_revenue', 'total_price_revenue'], axis=1)

最终输出结果:

category sub category  price  revenue  weighted_avg_excl_current
0        A           A1    100     1000                  114.834395
1        A           A2    110      990                  109.521739
2        A           A3    120      890                  104.975124
3        B           B1     90     1200                   97.604167
4        B           B2    100     1100                   92.432432
5        B           B3     95     1050                   94.878049

逻辑说明

核心逻辑是利用分组聚合先拿到每个类别下的全局总和,再通过总和减去当前行对应值的方式,快速得到排除当前子类别后的加权平均:
加权平均公式:(类别总价格营收乘积 - 当前行价格*营收) / (类别总营收 - 当前行营收)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:06