it-swarm.com.de

So sortieren Sie pandas Datenrahmen aus einer Spalte

Ich habe einen Datenrahmen wie diesen:

print(df)

        0          1     2
0   354.7      April   4.0
1    55.4     August   8.0
2   176.5   December  12.0
3    95.5   February   2.0
4    85.6    January   1.0
5     152       July   7.0
6   238.7       June   6.0
7   104.8      March   3.0
8   283.5        May   5.0
9   278.8   November  11.0
10  249.6    October  10.0
11  212.7  September   9.0

Wie Sie sehen, sind die Monate nicht in Kalenderreihenfolge. Also habe ich eine zweite Spalte erstellt, um die Monatsnummer für jeden Monat zu erhalten (1-12). Wie kann ich diesen Datenrahmen von dort nach der Reihenfolge der Kalendermonate sortieren?

156

Verwenden Sie sort_values , um den df nach den Werten einer bestimmten Spalte zu sortieren:

_In [18]:
df.sort_values('2')

Out[18]:
        0          1     2
4    85.6    January   1.0
3    95.5   February   2.0
7   104.8      March   3.0
0   354.7      April   4.0
8   283.5        May   5.0
6   238.7       June   6.0
5   152.0       July   7.0
1    55.4     August   8.0
11  212.7  September   9.0
10  249.6    October  10.0
9   278.8   November  11.0
2   176.5   December  12.0
_

Wenn Sie nach zwei Spalten sortieren möchten, übergeben Sie eine Liste der Spaltenbeschriftungen an _sort_values_, wobei die Spaltenbeschriftungen nach Sortierpriorität sortiert sind. Wenn Sie df.sort_values(['2', '0']) verwenden, wird das Ergebnis nach Spalte _2_ und dann nach Spalte _0_ sortiert. Zugegeben, dies ist in diesem Beispiel nicht wirklich sinnvoll, da jeder Wert in _df['2']_ eindeutig ist.

208
EdChum

Ich habe die oben genannten Lösungen ausprobiert und keine Ergebnisse erzielt. Daher habe ich eine andere Lösung gefunden, die für mich funktioniert. Mit aufsteigend = Falsch wird der Datenrahmen in absteigender Reihenfolge Standardmäßig ist es True . Ich verwende python 3.6.6 und pandas 0.23.4 Versionen.

final_df = df.sort_values(by=['2'], ascending=False)

Weitere Informationen finden Sie in der pandas Dokumentation hier .

40
Joel Carneiro

Fügen Sie einfach weitere Operationen für Daten hinzu. Angenommen, wir haben einen Datenrahmen df, dann können wir verschiedene Operationen ausführen, um die gewünschten Ausgaben zu erhalten

ID         cost      tax    label
1       216590      1600    test      
2       523213      1800    test 
3          250      1500    experiment

df['label'].value_counts().to_frame().reset_index()).sort_values('label', ascending=False)

gibt sorted Etiketten als dataframe aus

    index   label
0   test        2
1   experiment  1
6
Harry_pb

So wie eine andere Lösung:

sie können Ihre Zeichenfolgendaten (Monatsname) kategorisieren und folgendermaßen sortieren:

df.rename(columns={1:'month'},inplace=True)
df['month'] = pd.Categorical(df['month'],categories=['December','November','October','September','August','July','June','May','April','March','February','January'],ordered=True)
df = df.sort_values('month',ascending=False)

Sie erhalten die Daten sortiert nach dem Monatsnamen, wie Sie beim Erstellen des Objekts Categorical angeben.

0