Pandas的排序方式有兩種:
按 標簽 按實際值
我們看一個下面的示例。
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)
運行結(jié)果:
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
在unsorted_df中,標簽和值未排序。讓我們看看如何對它們進行排序。
使用sort_index()方法,通過傳遞軸參數(shù)和排序順序,可以對DataFrame進行排序。默認情況下,按升序?qū)π袠撕炦M行排序。
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)
運行結(jié)果:
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
通過將布爾值傳遞給升序參數(shù),可以控制排序的順序。讓我們考慮以下示例以了解相同的情況。
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)
運行結(jié)果:
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
通過將軸參數(shù)傳遞給值0或1,可以在列標簽上進行排序。默認情況下,axis = 0 按行排序。讓我們考慮以下示例以了解相同的情況。
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)
運行結(jié)果:
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
與索引排序類似,sort_values()是按值排序的方法。它接受一個“ by”參數(shù),該參數(shù)將使用要對值進行排序的DataFrame的列名。
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)
運行結(jié)果:
col1 col2 1 1 3 2 1 2 3 1 4 0 2 1
注意,col1值已排序,并且相應(yīng)的col2值和行索引將與col1一起更改。因此,它們看起來沒有分類。
'by' 參數(shù)采用列值列表。
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)
運行結(jié)果:
col1 col2 2 1 2 1 1 3 3 1 4 0 2 1
sort_values() 提供了從mergesort,heapsort和quicksort中選擇算法的指定。Mergesort是唯一穩(wěn)定的算法。
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)
運行結(jié)果:
col1 col2 1 1 3 2 1 2 3 1 4 0 2 1