我想按特定列对DataFrame进行分组,然后应用sklearn预处理MinMaxScaler并存储缩放器对象。
我的出发点:
import pandas as pd
from sklearn import preprocessing
scaler = {}
groups = df.groupby('ID')
for name, group in groups:
scr = preprocessing.MinMaxScaler()
scr.fit(group)
scaler.update({name: scr})
group = scr.transform(group)
这可以用df.groupby('ID').transform
吗?
更新
来自我原来的DataFrame
pd.DataFrame( dict( ID=list('AAABBB'),
VL=(0,10,10,100,100,200))
我想根据ID扩展所有列。在这个例子中:
A 0.0
A 1.0
A 1.0
B 0.0
B 0.0
B 1.0
使用信息/缩放器对象(使用fit初始化)
preprocessing.MinMaxScaler().fit( ... )
答案 0 :(得分:1)
你可以朝一个方向做:
In [62]: from sklearn.preprocessing import minmax_scale
In [63]: df
Out[63]:
ID VL SC
0 A 0 0
1 A 10 1
2 A 10 1
3 B 100 0
4 B 100 0
5 B 200 1
In [64]: df['SC'] = df.groupby('ID').VL.transform(lambda x: minmax_scale(x.astype(float)))
In [65]: df
Out[65]:
ID VL SC
0 A 0 0
1 A 10 1
2 A 10 1
3 B 100 0
4 B 100 0
5 B 200 1
但您不会使用inverse_transform
,因为MinMaxScaler
的每次调用(对于每个组或每个ID
)都会覆盖有关您的原始功能的信息......