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

Pandas:分组后如何对指定列进行标准化处理?

解决DataFrameGroupBy无法赋值新列的问题

你遇到的问题核心是DataFrameGroupBy对象不支持直接赋值新列,得把标准化后的结果关联回原始的DataFrame才行,而不是在分组对象上操作。下面给你两种简单可行的解决方法:

方法一:直接在原DataFrame生成标准化列

假设你的原始DataFrame叫df,分组依据的列是group_col(即你用来分组的那一列),直接用groupby配合transform给原DataFrame加新列:

df['priceNormed'] = df.groupby('group_col')['price'].transform(lambda x: (x - x.mean()) / x.std())

transform会返回和原DataFrame行数完全匹配的序列,刚好可以直接赋值给新列,自动对应到每个分组的行。

方法二:先获取标准化结果再赋值

如果已经提前定义了grouped对象(比如grouped = df.groupby('group_col')),可以先提取标准化后的结果,再赋值给原DataFrame:

# 先计算每个分组的标准化价格
normed_price_series = grouped['price'].transform(lambda x: (x - x.mean()) / x.std())
# 赋值给原DataFrame的新列
df['priceNormed'] = normed_price_series

额外补充:用sklearn工具实现标准化

如果你习惯用sklearn的标准化工具,也可以自定义函数后用transform调用:

from sklearn.preprocessing import StandardScaler

def standardize_group(x):
    scaler = StandardScaler()
    # 转换为二维数组后再标准化,最后展平为一维序列
    return scaler.fit_transform(x.values.reshape(-1, 1)).flatten()

df['priceNormed'] = df.groupby('group_col')['price'].transform(standardize_group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:45:30