Supponiamo di avere un frame dati con colonne a b & c, voglio ordinare i dati-Frame per colonna b in ascendente, e per colonna c in discendente, come posso fare?Come ordinare un dataFrame in panda python da due o più colonne?
risposta
A partire dalla versione 0.17.0, il metodo sort
è stato ritirato a favore di sort_values
. sort
è stato completamente rimosso nella versione 0.20.0. Gli argomenti (e risultati) rimangono gli stessi:
df.sort_values(['a', 'b'], ascending=[True, False])
È possibile utilizzare l'argomento ascendente di sort
:
df.sort(['a', 'b'], ascending=[True, False])
Ad esempio:
In [11]: df1 = pd.DataFrame(np.random.randint(1, 5, (10,2)), columns=['a','b'])
In [12]: df1.sort(['a', 'b'], ascending=[True, False])
Out[12]:
a b
2 1 4
7 1 3
1 1 2
3 1 2
4 3 2
6 4 4
0 4 3
9 4 3
5 4 1
8 4 1
Come commentato da @renadeen
Sort isn't in place by default! So you should assign result of the sort method to a variable or add inplace=True to method call.
che è, se si vuole riutilizzare df1 come dataframe ordinato:
df1 = df1.sort(['a', 'b'], ascending=[True, False])
o
df1.sort(['a', 'b'], ascending=[True, False], inplace=True)
'pd.DataFrame (randint (1, 5, (10,2)), columns = ['a', 'b'])' non sembra funzionare .... 'TypeError: randint() prende esattamente 3 argomenti (4 dati) ' – user1234440
@ user1234440 ah, questa è la funzione randint di numpy (piuttosto che casuale), lo renderò più chiaro, mi dispiace! cioè era 'da numpy.random import randint' e ** not **' da random import randint', l'ho modificato per usare np per essere più esplicito. –
L'ordinamento non è presente per impostazione predefinita! Quindi dovresti assegnare un risultato del metodo 'sort' a una variabile o aggiungere' inplace = True' alla chiamata al metodo. – renadeen
Come di panda 0.17.0, DataFrame.sort()
è obsoleto e impostare essere rimosso in una versione futura di panda. Il modo per ordinare un dataframe dai suoi valori è ora è DataFrame.sort_values
Come tale, la risposta alla tua domanda ora sarebbe
df.sort_values(['b', 'c'], ascending=[True, False], inplace=True)
vedere https://github.com/pydata/pandas/pull/10726 per la discussione di questo cambiamento. –
controllo questa risposta http://stackoverflow.com/a/14946246/1948860 – richie