come ordinare i frame di dati Panda da una colonna


237

Ho un frame di dati come questo:

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

Come puoi vedere, i mesi non sono in ordine di calendario. Quindi ho creato una seconda colonna per ottenere il numero del mese corrispondente a ciascun mese (1-12). Da lì, come posso ordinare questo frame di dati in base all'ordine dei mesi di calendario?

Risposte:


326

Utilizzare sort_valuesper ordinare il df in base ai valori di una colonna specifica:

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

Se si desidera ordinare in base a due colonne, passare un elenco di etichette di colonna sort_valuescon le etichette di colonna ordinate in base alla priorità di ordinamento. Se si utilizza df.sort_values(['2', '0']), il risultato verrà ordinato per colonna 2e colonna 0. Certo, questo non ha davvero senso per questo esempio perché ogni valore in df['2']è unico.


75

Ho provato le soluzioni sopra e non ottengo risultati, quindi ho trovato una soluzione diversa che funziona per me. L' ascendente = False è quello di ordinare il dataframe in decrescente ordine, per default è vero . Sto usando le versioni python 3.6.6 e panda 0.23.4.

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

Puoi vedere maggiori dettagli nella documentazione dei panda qui .


9

Aggiungo solo altre operazioni sui dati. Supponiamo di avere un frame di dati df, possiamo fare diverse operazioni per ottenere gli output desiderati

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)

darà l' sortedoutput delle etichette come adataframe

    index   label
0   test        2
1   experiment  1

7

Proprio come un'altra soluzione:

puoi classificare i dati della stringa (nome del mese) e ordinarli in questo modo:

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)

Ti darà i dati ordinati month namecome specificato durante la creazione Categoricaldell'oggetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.