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

Python pandas计算特定行数值与目标均值的百分比偏差方法问询

解决方案

核心实现逻辑

pandas 原生支持向量化运算,无需循环即可逐行计算百分比偏差,完全适配你的需求,不需要用pct_change(该方法仅适合同序列相邻元素的变化率计算,不适用与固定均值/对应列值的偏差计算),你之前尝试的索引修改方案和当前需求无关,无需使用。

具体代码实现

场景1:每行对应均值已经存储在mean列中

如果你的每一行价格对应的目标均值都已经提前计算好、存储在mean列,直接按如下方式计算即可:

df['pct_difference'] = (df['price'] - df['mean']) / df['mean'] * 100

按你给出的示例,均值10、价格8时,计算结果为-20,即价格比均值低20%,完全符合预期。

场景2:均值是固定的全局值(比如ab roller类别的全局平均价)

如果目标均值是提前计算好的固定值,比如所有ab roller商品的平均价格,先提取均值再计算即可:

# 先计算ab roller类别对应的全局平均价
ab_roller_mean = df.loc[df['tertiary_tag'] == 'ab roller', 'price'].mean()
# 逐行计算每个商品价格相对该均值的偏差
df['pct_difference'] = (df['price'] - ab_roller_mean) / ab_roller_mean * 100

原代码问题说明

你原来写的df['tertiary_tag']['price']属于链式索引,容易触发SettingWithCopyWarning,如果你的DataFrame是多级列结构,推荐用如下方式取值:

# 多级列正确取值方式,避免链式索引警告
price_col = df.loc[:, ('tertiary_tag', 'price')]
mean_col = df.loc[:, ('ab roller', 'mean')]
df['pct_difference'] = (price_col - mean_col) / mean_col * 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:03