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],columns=['col2','col1'])
unsorted_df
col2 | col1 | |
---|---|---|
1 | -0.214898 | -0.348607 |
4 | 0.444925 | 0.317103 |
6 | -0.468874 | 1.175216 |
2 | 1.595308 | -0.723725 |
3 | 0.633721 | -0.458441 |
5 | 0.277096 | -0.125369 |
9 | -0.215537 | 0.273400 |
8 | -1.247333 | -0.381350 |
0 | 1.284783 | 0.732031 |
7 | 0.296300 | 2.778396 |
unsorted_df.sort_index()
col2 | col1 | |
---|---|---|
0 | 1.284783 | 0.732031 |
1 | -0.214898 | -0.348607 |
2 | 1.595308 | -0.723725 |
3 | 0.633721 | -0.458441 |
4 | 0.444925 | 0.317103 |
5 | 0.277096 | -0.125369 |
6 | -0.468874 | 1.175216 |
7 | 0.296300 | 2.778396 |
8 | -1.247333 | -0.381350 |
9 | -0.215537 | 0.273400 |
unsorted_df.sort_index(ascending=False)
col2 | col1 | |
---|---|---|
9 | -0.215537 | 0.273400 |
8 | -1.247333 | -0.381350 |
7 | 0.296300 | 2.778396 |
6 | -0.468874 | 1.175216 |
5 | 0.277096 | -0.125369 |
4 | 0.444925 | 0.317103 |
3 | 0.633721 | -0.458441 |
2 | 1.595308 | -0.723725 |
1 | -0.214898 | -0.348607 |
0 | 1.284783 | 0.732031 |
unsorted_df.sort_index(axis=1)
col1 | col2 | |
---|---|---|
1 | -0.348607 | -0.214898 |
4 | 0.317103 | 0.444925 |
6 | 1.175216 | -0.468874 |
2 | -0.723725 | 1.595308 |
3 | -0.458441 | 0.633721 |
5 | -0.125369 | 0.277096 |
9 | 0.273400 | -0.215537 |
8 | -0.381350 | -1.247333 |
0 | 0.732031 | 1.284783 |
7 | 2.778396 | 0.296300 |
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
unsorted_df.sort_values(by='col1')
col1 | col2 | |
---|---|---|
1 | 1 | 3 |
2 | 1 | 2 |
3 | 1 | 4 |
0 | 2 | 1 |
注意: 观察上面的输出结果,col1值被排序,相应的col2值和行索引将随col1一起改变。因此,它们看起来没有排序。
通过 by
参数指定需要列值,参考以下示例代码 -
unsorted_df.sort_values(by=['col1','col2'])
col1 | col2 | |
---|---|---|
2 | 1 | 2 |
1 | 1 | 3 |
3 | 1 | 4 |
0 | 2 | 1 |
unsorted_df.sort_values(by='col1' ,kind='mergesort')
col1 | col2 | |
---|---|---|
1 | 1 | 3 |
2 | 1 | 2 |
3 | 1 | 4 |
0 | 2 | 1 |