2013-06-17 20 views

risposta

164

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) 
+1

'pd.DataFrame (randint (1, 5, (10,2)), columns = ['a', 'b'])' non sembra funzionare .... 'TypeError: randint() prende esattamente 3 argomenti (4 dati) ' – user1234440

+1

@ 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. –

+4

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

21

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) 
+1

vedere https://github.com/pydata/pandas/pull/10726 per la discussione di questo cambiamento. –

Problemi correlati