Python Pandas - Sắp xếp

Có hai loại phân loại có sẵn trong Gấu trúc. Họ là -

  • Theo nhãn
  • Theo giá trị thực tế

Chúng ta hãy xem xét một ví dụ với một đầu ra.

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

Nó là output như sau -

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

Trong unsorted_df, các labelsvalueskhông được sắp xếp. Hãy để chúng tôi xem chúng có thể được sắp xếp như thế nào.

Theo nhãn

Sử dụng sort_index(), bằng cách truyền các đối số trục và thứ tự sắp xếp, DataFrame có thể được sắp xếp. Theo mặc định, việc sắp xếp được thực hiện trên các nhãn hàng theo thứ tự tăng dần.

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

Nó là output như sau -

col2       col1
0   0.208464   0.627037
1   0.641004   0.331352
2  -0.038067  -0.464730
3  -0.638456  -0.021466
4   0.014646  -0.737438
5  -0.290761  -1.669827
6  -0.797303  -0.018737
7   0.525753   1.628921
8  -0.567031   0.775951
9   0.060724  -0.322425

Thứ tự sắp xếp

Bằng cách chuyển giá trị Boolean cho tham số tăng dần, thứ tự sắp xếp có thể được kiểm soát. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.

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

Nó là output như sau -

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

Sắp xếp các cột

Bằng cách chuyển đối số trục với giá trị 0 hoặc 1, việc sắp xếp có thể được thực hiện trên các nhãn cột. Theo mặc định, axis = 0, sắp xếp theo hàng. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.

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

Nó là output như sau -

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

Theo giá trị

Giống như sắp xếp chỉ mục, sort_values()là phương pháp sắp xếp theo giá trị. Nó chấp nhận một đối số 'by' sẽ sử dụng tên cột của DataFrame mà các giá trị sẽ được sắp xếp.

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

Nó là output như sau -

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

Hãy quan sát, các giá trị col1 được sắp xếp và giá trị col2 và chỉ số hàng tương ứng sẽ thay đổi cùng với col1. Vì vậy, chúng trông không được sắp xếp.

'by' đối số nhận một danh sách các giá trị cột.

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

Nó là output như sau -

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

Thuật toán sắp xếp

sort_values()cung cấp một điều khoản để lựa chọn thuật toán từ mergesort, heapsort và quicksort. Mergesort là thuật toán ổn định duy nhất.

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

Nó là output như sau -

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