2012-12-18 17 views
11

Ich bin ein Neuling Pandas Dataframe, und ich wollte eine Funktion auf jede Spalte anwenden, so dass es für jedes Element x, x/max der Spalte berechnet.Funktion auf Pandas Datenrahmen anwenden

Ich habe diese Frage referenziert, habe aber Probleme beim Zugriff auf das Maximum jeder Spalte. Vielen Dank im Voraus Pandas DataFrame: apply function to all columns

Eingang:

 A B C D 
    0 8 3 5 8 
    1 9 4 0 4 
    2 5 4 3 8 
    3 4 8 5 1 

Ausgang:

 A  B  C D 
    0 8/9 3/8 5/5 8/8 
    1 9/9 4/8 0/5 4/8 
    2 5/9 4/8 3/5 8/8 
    3 4/9 8/8 5/5 1/8 
+0

Würde "0.888 .." ausreichen, oder brauchen Sie wirklich den Bruchteil "8/9"? – DSM

+0

Oh ja, 0,888 wäre großartig. Es war beabsichtigt, die Operation zu zeigen. Entschuldigung für die Verwirrung. – msunbot

Antwort

13

So etwas wie dies funktionieren soll:

>>> from pandas import DataFrame 
>>> 
>>> df = DataFrame({"A": [8,9,5,4], "B": [3,4,4,8], "C": [5,0,3,5], "D": [8,4,8,1]}) 
>>> df.max() 
A 9 
B 8 
C 5 
D 8 
>>> (df * 1.0)/df.max() 
      A  B C  D 
0 0.888889 0.375 1.0 1.000 
1 1.000000 0.500 0.0 0.500 
2 0.555556 0.500 0.6 1.000 
3 0.444444 1.000 1.0 0.125 

Bitte beachte, dass ich df von 1.0 multipliziert, so dass es hat nicht bestanden von int s mehr (.astype(float) hätte auch funktioniert), um ganzzahlige Division und einen resultierenden Datenrahmen voller 0s und 1s zu vermeiden.

Verwandte Themen