Python Pandas - 排序
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
它的输出如下 −
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 中,labels 和 values 是未排序的。 让我们看看如何对这些进行排序。
按标签
使用 sort_index() 方法,通过传递轴参数和排序顺序,可以对 DataFrame 进行排序。 默认情况下,按升序对行标签进行排序。
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
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
排序顺序
通过将布尔值传递给升序参数,可以控制排序的顺序。 让我们考虑以下示例来理解相同的内容。
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
对列进行排序
通过传递值为 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
它的输出如下 −
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' 参数,该参数将使用要对值进行排序的 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
它的输出如下 −
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() 提供了从合并排序、堆排序和快速排序中选择算法的规定。 合并排序是唯一稳定的算法。
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

