2016-06-29 24 views
3

Ich habe die folgende Art von Datenrahmen:bis (0,1) bestimmten Spalten von Pandas Python Datenrahmen neu skalieren

Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen 
0 2   3  12669 9656 7561 214  2674    1338 
1 2   3  7057 9810 9568 1762  3293    1776 
2 2   3  6353 8808 7684 2405  3516    7844 
3 1   3  13265 1196 4221 6404  507    1788 
4 2   3  22615 5410 7198 3915  1777    5185 

Ich möchte zwei Dinge tun:

1) nur rückzuskalieren der Lage sein, bestimmte Spalten und nicht alle von ihnen, damit sie zwischen 0,1 liegen. Ich möchte nur bestimmte Spalten auswählen, aber nicht nach ihrem Namen, sondern nach ihrer Position. Stellen Sie sich vor, ich möchte 200 ändern und möchte nicht alle schreiben.

Der Code, den ich versuchte, war:

df /= df.max() 

Aber es macht alle Spalten zwischen (0,1) und nicht nur die, die ich sein will. Und ich finde keinen Weg, nur einen Teil von ihnen auszuwählen.

2) Ich würde auch gerne die Spalten skalieren, aber nicht zwischen ihnen, was ich meine, ich möchte nur eine Skala nur für Milch und eine andere nur für gefroren, zum Beispiel.

Ich möchte jede einzelne skalieren, zum Beispiel zwischen 100 dividieren, weil sie zu groß sind, aber vielleicht für eine andere Spalte möchte ich es zwischen 10 teilen, weil 100 zu viel ist. Wie würde ich das tun?

+0

Sie können Sub-select cols von Ihrem df durch eine Liste von Spalten, zum Beispiel 'df passing [[ 'Milch', 'eingefroren']] = df [ ['Milch', 'Gefroren']]/df [['Milch', 'Gefroren']]]. Max() ' – EdChum

Antwort

5

Für 1 finden Sie eine Liste der Spalten wie folgt aus:

df[['Milk','Frozen','Grocery']] 

Daher rückzuskalieren nur diese drei Säulen, Verwendung:

df[['Milk','Frozen','Grocery']] /= df[['Milk','Frozen','Grocery']].max() 

Diese Methode bereits skaliert Ihre Spalte unabhängig voneinander aus einander, wenn das deine zweite Frage bedeutet.

EDIT:

Wenn Sie die 200 ersten Spalten Ihrer Datenrahmen auswählen möchten, können Sie df.columns verwenden, die Sie die Liste der Spalten gibt:

df[df.columns[:200]] /= df[df.columns[:200]].max() 

die max Methode auf Pandas auf ein Dataframe gibt eine Liste des Maximums jeder Spalte zurück. Wenn Sie also den obigen Code verwenden, haben Sie in jeder der Spalten genau den Wert "1".

Wenn Sie es nicht durch das Maximum jeder Spalte, sondern die erste Spalte durch n1 teilen möchten, Sekunde Spalte von n2 können Sie die gleiche Schreibweise verwenden:

df[df.columns[:4]] /= [n1,n2,n3,n4] 
+0

Für 1) Ich möchte nur bestimmte Spalten auswählen, aber nicht nach ihrem Namen, sondern nach ihrer Position. Stellen Sie sich vor, ich möchte 200 ändern und möchte nicht alle schreiben. Für 2) Ich möchte jede einzelne skalieren, zum Beispiel zwischen 100 teilen, weil sie zu groß sind, aber vielleicht für eine andere Spalte möchte ich es zwischen 10 teilen, weil 100 zu viel ist. Wie würde ich das tun? Ich werde das in meiner Frage auch hinzufügen. –

+0

Ich habe meine Antwort bearbeitet, passt sie besser zu Ihren Bedürfnissen? – ysearka

Verwandte Themen