English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

排序Pandas

Ci sono due modi di ordinare in Pandas:

Per etichetta Per valore reale

Consideriamo un esempio seguente.

 import pandas as pd
 import numpy as np
 unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
 mns=['col2','col1'])
 print(unsorted_df)

结果运行:

    col2       col1
1  -2.063177   0.537527
4   0.142932  -0.684884
6   0.012667  -0.389340
2  -0.548797   1.848743
3  -1.044160   0.837381
5   0.385605   1.300185
9   1.031425  -1.002967
8  -0.407374  -0.435142
0   2.237453  -1.067139
7  -1.445831  -1.701035

In unsorted_df, le etichette e i valori non sono ordinati. Vediamo come possiamo ordinare.

Ordinamento per etichetta

Utilizzando il metodo sort_index(), tramite la trasmissione del parametro asse e dell'ordine di sortimento, e' possibile ordinare un DataFrame. Di default, l'ordine di sortimento e' crescente per le etichette delle righe.

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2','col1'])
 sorted_df = unsorted_df.sort_index()
 print(sorted_df)

结果运行:

     col2		col1
9	0.825697	0.374463
8	-1.699509	0.510373
7	-0.581378	0.622958
6	-0.202951	0.954300
5	-1.289321	-1.551250
4	1.302561	0.851385
3	-0.157915	-0.388659
2	-1.222295	0.166609
1	0.584890	-0.291048
0	0.668444	-0.061294

Ordine di sortimento

Tramitando un valore booleano come parametro in ordine crescente, e' possibile controllare l'ordine di sortimento. Consideriamo l'esempio seguente per comprendere la situazione.

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2','col1'])
 sorted_df = unsorted_df.sort_index(ascending=False)
 print(sorted_df)

结果运行:

     col2		col1
9	0.825697	0.374463
8	-1.699509	0.510373
7	-0.581378	0.622958
6	-0.202951	0.954300
5	-1.289321	-1.551250
4	1.302561	0.851385
3	-0.157915	-0.388659
2	-1.222295	0.166609
1	0.584890	-0.291048
0	0.668444	-0.061294

Ordinamento per riga

Tramite la trasmissione del parametro dell'asse 0 o 1, è possibile ordinare sulle etichette delle colonne. Di default, axis = 0 ordina per riga. Consideriamo l'esempio seguente per comprendere la stessa situazione.

 import pandas as pd
 import numpy as np
  
 unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
    mns = ['col2','col1'])
  
 sorted_df = unsorted_df.sort_index(axis=1)
 print(sorted_df)

结果运行:

     col1		col2
1	-0.291048	0.584890
4	0.851385	1.302561
6	0.954300	-0.202951
2	0.166609	-1.222295
3	-0.388659	-0.157915
5	-1.551250	-1.289321
9	0.374463	0.825697
8	0.510373	-1.699509
0	-0.061294	0.668444
7	0.622958	-0.581378

Ordinamento per valore

Simile alla ordinazione dell'indice, sort_values() è un metodo di ordinamento per valore. Accetta un parametro 'by', che utilizza il nome della colonna del DataFrame per ordinare i valori.

import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
    sorted_df = unsorted_df.sort_values(by='col1')
 print(sorted_df)

结果运行:

   col1  col2
1    1    3
2    1    2
3    1    4
0    2    1

注意,col1值已排序,并且相应的col2值和行索引将与col1一起更改。因此,它们看起来没有分类。

'by' 参数采用列值列表。

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
    sorted_df = unsorted_df.sort_values(by=['col1','col2'])
 print(sorted_df)

结果运行:

  col1 col2
2   1    2
1   1    3
3   1    4
0   2    1

算法排序

sort_values() 指定了从mergesort,heapsort和quicksort中选择算法的指定。Mergesort是唯一稳定的算法。

 import pandas as pd
 import numpy as np
 unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
 sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')
 print(sorted_df)

结果运行:

  col1 col2
1    1    3
2    1    2
3    1    4
0    2    1