498 Stimmen

Sortieren von Spalten in Pandas Dataframe basierend auf dem Spaltennamen

Ich habe eine dataframe mit über 200 Spalten. Das Problem ist, dass die Reihenfolge, in der sie generiert wurden, wie folgt ist

['Q1.3','Q6.1','Q1.2','Q1.1',......]

Ich muss die Spalten wie folgt sortieren:

['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]

Gibt es eine Möglichkeit für mich, dies innerhalb von Python zu tun?

633voto

BrenBarn Punkte 228691
df = df.reindex(sorted(df.columns), axis=1)

Dabei wird davon ausgegangen, dass die Sortierung der Spaltennamen die gewünschte Reihenfolge ergibt. Wenn Ihre Spaltennamen nicht lexikografisch sortiert werden (z. B. wenn die Spalte Q10.3 nach Q9.1 erscheinen soll), müssen Sie anders sortieren, aber das hat nichts mit Pandas zu tun.

479voto

Wes McKinney Punkte 94041

Sie können sich auch kürzer fassen:

df.sort_index(axis=1)

Vergewissern Sie sich, dass Sie das Ergebnis zurückgeben:

df = df.sort_index(axis=1)

Oder machen Sie es an Ort und Stelle:

df.sort_index(axis=1, inplace=True)

75voto

Ivelin Punkte 10707

Sie können es einfach tun:

df\[sorted(df.columns)\]

Edit: Kürzer ist

df[sorted(df)]

36voto

Myeongsik Joo Punkte 539

Bei mehreren Spalten können Sie die Reihenfolge der Spalten nach Belieben festlegen:

#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]

Dieses Beispiel zeigt das Sortieren und Aufteilen von Spalten:

d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)

Sie erhalten:

col1  col2  col3  col4
 1     4     7    17
 2     5     8    18
 3     6     9    19

Dann tun Sie das:

df = df[['col3', 'col2', 'col1']]

Daraus ergibt sich:

col3  col2  col1
7     4     1
8     5     2
9     6     3

27voto

Jeremy Low Punkte 425

Antwort von Tweet kann an BrenBarns obige Antwort übergeben werden mit

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

Sagen wir also, für Ihr Beispiel:

vals = randint(low=16, high=80, size=25).reshape(5,5)
cols = ['Q1.3', 'Q6.1', 'Q1.2', 'Q9.1', 'Q10.2']
data = DataFrame(vals, columns = cols)

Sie erhalten:

data

    Q1.3    Q6.1    Q1.2    Q9.1    Q10.2
0   73      29      63      51      72
1   61      29      32      68      57
2   36      49      76      18      37
3   63      61      51      30      31
4   36      66      71      24      77

Dann tun Sie das:

data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)

was dazu führt:

data

     Q1.2    Q1.3    Q6.1    Q9.1    Q10.2
0    2       0       1       3       4
1    7       5       6       8       9
2    2       0       1       3       4
3    2       0       1       3       4
4    2       0       1       3       4

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X