2017-03-13 20 views
2

내 DataFrame을 특정 열로 그룹화 한 다음 Sklearn 사전 처리 MinMaxScaler를 적용하고 스케일러 개체를 저장하려고합니다.skandarn groupby와 sklearn 전처리 과정의 조합

순간 시작 지점에서

내 :

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)) 

에서

UPDATE

나는 ID를 기반으로 모든 열을 확장합니다. 이 예에서 : 정보/스케일러 객체 ​​

A 0.0 
    A 1.0 
    A 1.0 
    B 0.0 
    B 0.0 
    B 1.0 

preprocessing.MinMaxScaler().fit(...) 

답변

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 

하지만 당신은 anle되지 않습니다 MinMaxScaler (각 그룹 또는 각 ID)의 각 호출에 inverse_transform을 사용하면 원래 기능에 대한 정보를 덮어 씁니다 ...