如何在Python中按分组ID应用sklearn.preprocessing.MinMaxScaler
按ID分组对指定列应用MinMaxScaler实现归一化
你可以通过分组后自定义函数处理的方式实现按id分组对指定列应用MinMaxScaler,以下是完整实现代码和说明:
原始DataFrame构建代码
import pandas as pd # 创建数据集 data = {'id': ['A', 'A', 'A', 'A', 'A','A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'E', 'E', 'E', 'E', 'E','E'], 'cycle': [1,2, 3, 4, 5,6,7, 1,2, 3,4,5,6, 1,2, 3, 4, 5, 1,2, 3, 4, 1,2, 3, 4, 5,6,], 'Salary': [7, 7, 7,8,9,10,15, 4, 4, 4,4,5,6, 8,9,10,12,13, 8,9,10,11, 7, 11,12,13,14,15,], 'Jobs': [123, 18, 69, 65, 120, 11, 52, 96, 120,10, 141, 52,6, 101,99, 128, 1, 141, 141,123, 12, 66, 12, 128, 66, 100, 141, 52,], 'Days': [123, 128, 66, 66, 120, 141, 52, 96, 120,120, 141, 52,96, 15,123, 128, 120, 141, 141,123, 128, 66, 123, 128, 66, 120, 141, 52,], } # 转换为DataFrame df = pd.DataFrame(data)
分组归一化实现代码
from sklearn.preprocessing import MinMaxScaler # 定义分组处理函数:对指定列应用MinMaxScaler def scale_group(group): scaler = MinMaxScaler() # 指定需要归一化的目标列 cols_to_scale = ['Salary', 'Jobs', 'Days'] # 对目标列执行归一化并替换原数据 group[cols_to_scale] = scaler.fit_transform(group[cols_to_scale]) return group # 按id分组处理,重置索引保持结构一致 scaled_df = df.groupby('id', group_keys=False).apply(scale_group).reset_index(drop=True) # 查看处理结果 print(scaled_df)
关键说明
groupby('id', group_keys=False):按id维度分组,group_keys=False避免生成冗余的分组索引列- 自定义
scale_group函数:针对每个独立分组初始化归一化器,仅对指定的三列执行拟合和转换操作,直接覆盖原列值 reset_index(drop=True):将分组后产生的多级索引重置为连续普通索引,保证结果DataFrame结构与原始数据一致
处理后每个id分组内的Salary、Jobs、Days列都会被归一化至[0,1]区间,符合预期效果。
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

