wie man pandas dataframe aus einer spalte sortiert

236

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 können, sind die Monate nicht in der Kalenderreihenfolge. Also habe ich eine zweite Spalte erstellt, um die Monatsnummer zu erhalten, die jedem Monat entspricht (1-12). Wie kann ich von dort aus diesen Datenrahmen nach der Reihenfolge der Kalendermonate sortieren?

Sachila Ranawaka
quelle

Antworten:

322

Verwenden Sie sort_valuesdiese Option, 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 mit Spaltenbeschriftungen an sort_valuesdie Spaltenbeschriftungen, die nach Sortierpriorität sortiert sind. Wenn Sie verwenden df.sort_values(['2', '0']), wird das Ergebnis nach Spalte 2und Spalte sortiert 0. Zugegeben, dies ist für dieses Beispiel nicht wirklich sinnvoll, da jeder Wert in df['2']eindeutig ist.

EdChum
quelle
75

Ich habe die oben genannten Lösungen ausprobiert und erreiche keine Ergebnisse. Daher habe ich eine andere Lösung gefunden, die für mich funktioniert. Das aufsteigende = False dient dazu, den Datenrahmen in absteigender Reihenfolge zu ordnen. Standardmäßig ist es True . Ich verwende die Versionen Python 3.6.6 und Pandas 0.23.4.

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

Weitere Details finden Sie in der Pandas-Dokumentation hier .

Joel Carneiro
quelle
8

Fügen Sie einfach weitere Operationen für Daten hinzu. Angenommen, wir haben einen Datenrahmen df, können wir mehrere 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 die sortedAusgabe von Etiketten alsdataframe

    index   label
0   test        2
1   experiment  1
Harry_pb
quelle
7

Nur als 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 bestellten Daten nach Ihren month nameVorgaben beim Erstellen des CategoricalObjekts.

alireza yazdandoost
quelle