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

如何用pandas groupby结合sklearn MinMaxScaler按分组实现特征归一化

按类目+日期分组实现特征归一化的实现代码

直接通过groupby配合自定义处理函数即可实现需求,完整可运行代码如下:

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 读取测试数据
df=pd.read_csv('https://raw.githubusercontent.com/amanaroratc/hello-world/master/testdf.csv')

# 配置项
## 需要归一化的原始特征列
norm_cols = ['rank', 'ratings']
## 分组维度:类目+日期
group_cols = ['category', 'date']
## 归一化后输出的列名
output_cols = ['rank_norm_mm', 'ratings_norm_mm']

scaler = MinMaxScaler()

# 定义分组内归一化函数
def group_norm(group):
    group[output_cols] = scaler.fit_transform(group[norm_cols])
    return group

# 分组执行归一化,结果直接合并到原DataFrame
df = df.groupby(group_cols, group_keys=False).apply(group_norm)

# 查看结果
print(df.head())

注意事项

  • 参数group_keys=False的作用是避免分组键被设为额外索引层级,保证返回结果的行顺序和原数据完全对齐
  • 如果某个分组内某列的所有值完全相同,MinMaxScaler计算时会生成NaN值,可通过nan_to_num填充默认值,修改处理函数即可:
def group_norm(group):
    scaled_data = scaler.fit_transform(group[norm_cols])
    # 把NaN替换为0,可根据业务需求调整填充值
    scaled_data = np.nan_to_num(scaled_data, nan=0.0)
    group[output_cols] = scaled_data
    return group
  • 该方案可直接扩展到其他scaler(如StandardScaler、RobustScaler),只需替换scaler实例即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:39:02