Pandas | 10 排序

Pandas有两种排序方式,它们分别是 -

  • 按标签
  • 按实际值
import pandas as pd
import numpy as np

df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=[‘col2‘,‘col1‘])
print (df)

输出结果:

col2      col1
 1.069838  0.096230
-0.542406 -0.219829
-0.071661  0.392091
 1.399976 -0.472169
 0.428372 -0.624630
 0.471875  0.966560
-0.131851 -1.254495
 1.180651  0.199548
 0.906202  0.418524
 0.124800  2.011962
 

df数据值中,标签和值未排序。下面来看看如何按标签来排序。

按标签排序

使用sort_index()方法,通过传递axis参数和排序顺序,可以对DataFrame进行排序。 默认情况下,按照升序对行标签进行排序。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘])
sorted_df=df.sort_index()
print (sorted_df)

输出结果:

col2      col1
 0.431384 -0.401538
 0.111887 -0.222582
-0.166893 -0.237506
 0.476472  0.508397
 0.670838  0.406476
 2.065969 -0.324510
-0.441630  1.060425
 0.735145  0.972447
-0.051904 -1.112292
 0.134108  0.759698
 

排序顺序

  通过将布尔值传递给升序参数,可以控制排序顺序。 

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘])
sorted_df = df.sort_index(ascending=False)
print (sorted_df)

输出结果:

col2      col1
 0.750452  1.754815
 0.945238  2.079394
 0.345238 -0.162737
-0.512060  0.887094
 1.163144  0.595402
-0.063584 -0.185536
-0.275438 -2.286831
-1.504792 -1.222394
 1.031234 -1.848174
-0.615083  0.784086
 

按列排列

  通过传递axis参数值为01,可以对列标签进行排序。 默认情况下,axis = 0,逐行排列。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = [‘col2‘,‘col1‘])
sorted_df=df.sort_index(axis=1)
print (sorted_df)

输出结果:

col1      col2
-0.997962  0.736707
 1.196464  0.703710
-0.387800  1.207803
 1.614043  0.356389
-0.057181 -0.551742
 1.034451 -0.731490
-0.564355  0.892203
-0.763526  0.684207
-1.213615  1.268649
 0.316543 -1.450784
 

按值排序

sort_values()是按值排序的方法。它接受一个by参数,它将使用要与其排序值的DataFrame的列名称。

import pandas as pd
import numpy as np

df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]})
sorted_df = 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一起改变。因此,它们看起来没有排序。

可以传递多个列,前列相同的情况下,排后列

import pandas as pd
import numpy as np

df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]})
sorted_df = 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()提供了从mergeesortheapsortquicksort中选择算法的一个配置。Mergesort是唯一稳定的算法。

import pandas as pd
import numpy as np

df = pd.DataFrame({‘col1‘:[2,1,1,1],‘col2‘:[1,3,2,4]})
sorted_df = df.sort_values(by=‘col1‘ ,kind=‘mergesort‘)
print (sorted_df)

输出结果:

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