Hướng dẫn dùng sort_values pandas python

Có hai cách phân loại có sẵn trong Panda:

  • Theo nhãn
  • Theo giá trị

Xem xét ví dụ sau :

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

Kết quả :

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 nhãn và giá trị không được sắp xếp. Ta sẽ xem qua các cách sắp xếp

1. Theo nhãn ( Label )

Sử dụng phương thức sort_index (), bằng cách chuyể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

Kết quả :

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 kiểm tra. Chúng ta hãy xem xét ví dụ tương tự sau để hiểu.

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

Sắp xếp theo 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

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

Kết quả :

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

2. Theo giá trị (Value):

Giống như sắp xếp theo chỉ mục, sort_values () là phương thức để sắp xếp theo giá trị. Nó dùng đố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

Kết quả :

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

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, nó không được sắp xếp.

đối số 'by' 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

Kết quả :

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

3. Thuật toán sắp xếp :

sort_values () cung cấp thuật toán như mergesort, heapsort và quicksort. Mergesort là thuật toán ổn định nhất.

Ví dụ :

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

Kết quả :

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

Có hai cách phân loại có sẵn trong Panda:

  • Theo nhãn
  • Theo giá trị

Xem xét ví dụ sau :

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

Kết quả :

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 nhãn và giá trị không được sắp xếp. Ta sẽ xem qua các cách sắp xếp

1. Theo nhãn ( Label )

Sử dụng phương thức sort_index (), bằng cách chuyể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

Kết quả :

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 kiểm tra. Chúng ta hãy xem xét ví dụ tương tự sau để hiểu.

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

Sắp xếp theo 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

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

Kết quả :

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

2. Theo giá trị (Value):

Giống như sắp xếp theo chỉ mục, sort_values () là phương thức để sắp xếp theo giá trị. Nó dùng đố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

Kết quả :

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

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, nó không được sắp xếp.

đối số 'by' 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

Kết quả :

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

3. Thuật toán sắp xếp :

sort_values () cung cấp thuật toán như mergesort, heapsort và quicksort. Mergesort là thuật toán ổn định nhất.

Ví dụ :

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

Kết quả :

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

Có vẻ như bạn phải có các loại hỗn hợp trong cột Education trong DataFrame của bạn. Thông báo lỗi cho bạn biết rằng nó không thể so sánh các chuỗi với số float trong cột của bạn. Giả sử bạn muốn sắp xếp các giá trị bằng số, bạn có thể chuyển đổi chúng thành loại số nguyên và sắp xếp sau đó. Tôi khuyên bạn nên làm điều này bằng mọi cách, vì các loại hỗn hợp sẽ không quá hữu ích cho bất kỳ hoạt động nào trong DataFrame của bạn. Sau đó sử dụng DataFrame.sort_values

suicide_data['Education'] = suicide_data['Education'].astype('int')
suicide_data.sort_values(by='Education')

Nó cũng có giá trị chỉ ra rằng nỗ lực đầu tiên của bạn,

suicide_data.sort_index(axis=0, kind='mergesort')

sẽ sắp xếp DataFrame của bạn theo chỉ mục mà bạn không muốn và lần thử thứ hai của bạn 

suicide_data.Education.sort_values()

sẽ chỉ trả về Sê-ri đã sắp xếp - chúng là các cách tiếp cận hoàn toàn không hợp lệ.