Python中如何使用MinMaxScaler对pandas数据框按分组做归一化?
问题原因
- 变量名拼写错误:你前面定义的DataFrame变量名是
data,但分组时写的是dataframe,运行会直接报变量未定义错误。 - 输入维度不匹配:
MinMaxScaler.fit_transform()要求输入是二维数组,而groupby取出来的x是一维Series,直接传入会触发维度错误。 - 全局Scaler实例状态污染:你全局只初始化了一个
MinMaxScaler,处理不同分组时前一个分组的拟合参数会被后一个覆盖,无法实现每组独立缩放。
正确实现代码
import pandas as pd from sklearn.preprocessing import MinMaxScaler data = pd.DataFrame({'x': [1,2,3,4,5], 'name': ['jo', 'ellen','jo', 'ellen' ,'jo' ]} ) # 按name字段分组,每组独立执行MinMax缩放 data['scaled_x'] = data.groupby('name')['x'].transform( lambda s: MinMaxScaler().fit_transform(s.values.reshape(-1, 1)).flatten() )
运行结果
处理后的DataFrame输出如下:
x name scaled_x 0 1 jo 0.0 1 2 ellen 0.0 2 3 jo 0.5 3 4 ellen 1.0 4 5 jo 1.0
完全符合分组独立缩放的预期:jo分组的x值[1,3,5]缩放后对应[0,0.5,1],ellen分组的x值[2,4]缩放后对应[0,1]。
内容的提问来源于stack exchange,提问作者Soren Christensen
相关产品推荐
相关产品推荐

