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

计算z-score时如何仅用分组内units_sold的负值计算均值与标准差

代码修改方案

你只需要在计算均值、标准差前,先筛选当前分组内的负值数据参与统计即可,修改后的实现如下:

简化写法(直接修改lambda)

zscore = lambda x: (x - x[x < 0].mean()) / x[x < 0].std()
df['zscore'] = df['units_sold'].groupby(df['Product_ID']).transform(zscore)

兼容边界情况的完整写法

如果存在部分分组没有负值、或者负值数量不足2个(无法计算有效标准差)的场景,可以用自定义函数处理异常:

import pandas as pd
import numpy as np

def zscore_negative_only(x):
    # 提取分组内的负值数据
    neg_data = x[x < 0]
    # 负值样本量不足时返回空值,也可根据业务需求修改为其他默认值
    if len(neg_data) < 2:
        return pd.Series([np.nan] * len(x), index=x.index)
    # 仅用负值计算均值和标准差
    neg_mean = neg_data.mean()
    neg_std = neg_data.std()
    return (x - neg_mean) / neg_std

# 分组计算zscore
df['zscore'] = df['units_sold'].groupby(df['Product_ID']).transform(zscore_negative_only)

逻辑说明:上述两种写法都是仅用分组内的负值统计均值和标准差,但最终会为分组内的每一行(无论该行units_sold是正还是负)计算对应的z-score值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:03