2016-05-20 12 views
1

Angesichts der folgenden Datenrahmen:Pandas Sortierung der Spalten von Row

df = pd.DataFrame({'A' : ['1','2','3','7'], 
        'B' : [7,6,5,4], 
        'C' : [5,6,7,1], 
        'D' : [1,9,9,8]}) 
df=df.set_index('A') 
df 

    B C D 
A   
1 7 5 1 
2 6 6 9 
3 5 7 9 
7 4 1 8 

Ich möchte die Reihenfolge der Spalten sortieren absteigend auf der untersten Zeile wie folgt aus:

D B C 
A   
1 1 7 5 
2 9 6 6 
3 9 5 7 
7 8 4 1 

Vielen Dank im Voraus !

Antwort

2

Der einfachste Weg ist die Transponierung, dann sort_values, dann transponieren.

df.T.sort_values('7', ascending=False).T 

oder

df.T.sort_values(df.index[-1], ascending=False).T 

Gibt:

D B C 
A   
1 1 7 5 
2 9 6 6 
3 9 5 7 
7 8 4 1 

Testing

meine Lösung

%%timeit 
df.T.sort_values(df.index[-1], ascending=False).T 

1000 loops, best of 3: 444 µs per loop 

alternative Lösung

%%timeit 
df[[c for c in sorted(list(df.columns), key=df.iloc[-1].get, reverse=True)]] 

1000 loops, best of 3: 525 µs per loop 
+0

Kann ich es ohne den Wert Referenzierung ‚7‘ ausdrücklich? –

+0

Wird es immer die letzte Zeile sein? – piRSquared

+0

Ja, wird es immer sein. –

2

Hier ist eine Variante, die keine Umsetzung mit sich bringt:

df = df[[c for c in sorted(list(df.columns), key=df.iloc[-1].get, reverse=True)]]