2017-03-13 3 views
2

Ich möchte meine DataFrame durch spezifische Spalte gruppieren und dann eine sklearn Vorverarbeitung MinMaxScaler anwenden und speichern Sie das Scaler-Objekt.Pandas groupby in Kombination mit sklearn preprocessing

Mein zur Zeit der Ausgangspunkt:

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) 

Ist dies möglich mit df.groupby('ID').transform?

UPDATE

Von meiner ursprünglichen Datenrahmen

pd.DataFrame(dict(ID=list('AAABBB'), 
        VL=(0,10,10,100,100,200)) 

Ich möchte alle Spalten auf ID basiert skalieren. In diesem Beispiel:

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

mit den Informationen/Scaler-Objekt (mit Sitz initialisiert)

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

Antwort

1

Sie es in eine Richtung tun:

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 

aber Sie werden nicht anle sein zu verwenden als jeder Anruf von MinMaxScaler (für jede Gruppe oder jede ID) überschreibt die Informationen über Ihre ursprünglichen Funktionen ...