Pandas groupby结合sklearn预处理

Rob*_*oby 6 scipy pandas

我想按特定列对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)

Max*_*axU 9

你可以在一个方向上做到这一点:

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)都会覆盖有关您原始特征的信息......