我想按特定列对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)
Run Code Online (Sandbox Code Playgroud)
这有可能df.groupby('ID').transform吗?
UPDATE
从我原来的DataFrame
pd.DataFrame( dict( ID=list('AAABBB'),
VL=(0,10,10,100,100,200))
Run Code Online (Sandbox Code Playgroud)
我想根据ID扩展所有列.在这个例子中:
A 0.0
A 1.0
A 1.0
B 0.0
B 0.0
B 1.0
Run Code Online (Sandbox Code Playgroud)
使用信息/缩放器对象(使用fit初始化)
preprocessing.MinMaxScaler().fit( ... )
Run Code Online (Sandbox Code Playgroud)
你可以在一个方向上做到这一点:
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
Run Code Online (Sandbox Code Playgroud)
但是您不会使用,inverse_transform因为每次调用MinMaxScaler(对于每个组或每个ID)都会覆盖有关您原始特征的信息......