Pandas groupby结合sklearn预处理

时间:2017-03-13 20:22:57

标签: pandas scipy

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

1 个答案:

答案 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)都会覆盖有关您的原始功能的信息......