Pandas教程-Pandas DataFrame.sort()
在DataFrame中,我们可以通过不同的方式高效地进行排序:
- 按标签
- 按实际值
在解释这两种排序之前,首先我们需要使用一个数据集进行演示:
import pandas as pd
import numpy as np
info=pd.DataFrame(np.random.randn(10,2),index=[1,3,7,2,4,5,9,8,0,6],columns=['col2','col1'])
print(info)
输出
col2 col1
1 -0.456763 -0.931156
3 0.242766 -0.793590
7 1.133803 0.454363
2 -0.843520 -0.938268
4 -0.018571 -0.315972
5 -1.951544 -1.300100
9 -0.711499 0.031491
8 1.648080 0.695637
0 2.576250 -0.625171
6 -0.301717 0.879970
在上面的DataFrame中,标签和值都是未排序的。所以,让我们看看如何进行排序:
- 按标签
可以使用sort_index()方法对DataFrame进行排序。可以通过传递轴参数和排序顺序来完成。默认情况下,按行标签升序排序。
示例
import pandas as pd
import numpy as np
info=pd.DataFrame(np.random.randn(10,2),index=[1,2,5,4,8,7,9,3,0,6],columns = ['col4','col3'])
info2=info.sort_index()
print(info2)
输出
col4 col3
0 0.698346 1.897573
1 1.247655 -1.208908
2 -0.469820 -0.546918
3 -0.793445 0.362020
4 -1.184855 -1.596489
5 1.500156 -0.397635
6 -1.239635 -0.255545
7 1.110986 -0.681728
8 -1.797474 0.108840
9 0.063048 1.512421
- 排序顺序
通过将布尔值传递给ascending参数,可以控制排序的顺序。
示例:
import pandas as pd
import numpy as np
info= pd.DataFrame(np.random.randn(10,2),index=[1,4,7,2,5,3,0,8,9,6],columns = ['col4','col5'])
info_2 = info.sort_index(ascending=False)
print(info)
输出
col4 col5
1 0.664336 -1.846533
4 -0.456203 -1.255311
7 0.537063 -0.774384
2 -1.937455 0.257315
5 0.331764 -0.741020
3 -0.082334 0.304390
0 -0.983810 -0.711582
8 0.208479 -1.234640
9 0.656063 0.122720
6 0.347990 -0.410401
- 对列进行排序:
我们可以通过传递与其值相关的轴参数0或1,对列标签进行排序。默认情况下,axis=0,它按行排序。
示例:
import pandas as pd
import numpy as np
info = pd.DataFrame(np.random.randn(10,2),index=[1,4,8,2,0,6,7,5,3,9],columns = ['col4','col7'])
info_2=info.sort_index(axis=1)
print(info_2)
输出
col4 col7
1 -0.509367 -1.609514
4 -0.516731 0.397375
8 -0.201157 -0.009864
2 1.440567 1.058436
0 0.955486 -0.009777
6 -1.211133 0.415147
7 0.095644 0.531727
5 -0.881241 -0.871342
3 0.206327 -1.154724
9 1.418127 0.146788
按实际值
这是DataFrame中可以执行的另一种排序方式。与索引排序类似,sort_values()是按值排序的方法。
它还提供了一种功能,即我们可以指定要排序的DataFrame的列名。这是通过传递'by'参数来完成的。
示例:
import pandas as pd
import numpy as np
info = pd.DataFrame({'col1':[7,1,8,3],'col2':[8,12,4,9]})
info_2 = info.sort_values(by='col2')
print(info_2)
输出
col1 col2
2 8 4
0 7 8
3 3 9
1 1 12
在上面的输出中,注意值仅按col2排序,并且相应的col1值和行索引将随着col2而改变。因此,它们看起来是未排序的。
参数
- columns: 在排序之前,您必须传递一个对象或列名。
- ascending: 传递一个布尔值,用于按升序排序。其默认值为True。
- axis: 0或索引;1或'columns'。默认值为0。它决定是按索引还是按列排序。
- inplace: 传递一个布尔值。其默认值为false。在对DataFrame进行排序时,它会修改对此对象的任何其他视图,并且不会在排序DataFrame时创建新的实例。
- kind: 'heapsort', 'mergesort', 'quicksort'。这是一个可选参数,仅在对单个列或标签进行排序时应用。
- na_position: 'first', 'last'。'first'将NaN放在开头,而'last'*将NaN放在末尾。默认选项是last。