Series对象或DataFrame对象使用sort_index()函数进行排序

2024年3月22日14:43:40Series对象或DataFrame对象使用sort_index()函数进行排序已关闭评论

根据条件对Series对象或DataFrame对象的值排序(Sorting)和排名(Ranking)是Pandas一种重要的内置运算。Series对象或DataFrame对象可以使用sort_index()/sort_values()函数进行排序,使用rank()函数进行排名。

1 Series的排序

Series的sort_index()函数:

sort_index(ascending = True)

对Series的索引进行排序,默认是升序。

例如:

import pandas as pd 
s = pd.Series([10, 20, 33], index=["a", "c", "b"])  # 定义一个Series 
print(s.sort_index())  # 对Series的索引进行排序,默认是升序

结果如下:

a    10 
b    33 
c    20

对索引进行降序排序:

print(s.sort_index(ascending=False))    # ascending=False表示是降序排序

Series不仅可以按索引进行排序,还可以使用sort_values()函数按值排序。

print(s.sort_values(ascending=False))    # ascending=False表示是降序排序

结果如下:

b    33 
c    20 
a    10

2 DataFrame的排序

DataFrame的sort_index()函数:

sort_index(self, axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None

其中部分参数含义如下。

axis:0表示按照索引排序;1表示按照列名排序。

level:默认为None,否则按照给定的级别排序。

ascending:默认为True,表示升序排序;False,表示降序排序。

inplace:默认为False,否则排序之后的数据直接替换原来的DataFrame。

kind:默认为quicksort,表示排序的方法。

na_position:缺失值默认排在最前(取值为first)/后(取值为last)。

sort_remaining:如果为True,则在按指定级别排序后再按其他的级别排序。

by:按照指定值排序。

例如:


import pandas as pd 
df= pd.DataFrame([[199901, '张海', '男' ,100, 100, 25, 72], 
                [199902, '赵大强', '男', 95, 54, 44, 88], 
                [199903, '李梅', '女', 54, 76, 13, 91], 
                [199904, '吉建军', '男', 89, 78, 26, 100]] , 
                columns = ['xuehao', 'name', 'sex', 'physics', 'Python', 'math', 'English'], 
                index=[1,4,6,2])

使用sort_index(),可以对DataFrame进行排序。默认情况下,按照升序对索引进行排序。

sorted_df=df.sort_index()    #对索引进行升序排序 
print(sorted_df)

结果如下:

   xuehao   name   sex    physics  Python  Math  English 
1  199901    张海    男        100     100    25       72 
2  199904  吉建军    男         89      78    26      100 
4  199902  赵大强    男         95      54    44       88 
6  199903   李梅    女         54      76    13       91

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

sorted_df=df.sort_index(ascending = False)   #索引降序排序

通过令axis参数值为0或1,可以按索引或按列名进行排序。默认情况下,axis=0,逐行排序。下面举例来介绍axis参数。

sorted_df=df.sort_index(axis=1)    #按列名排序 
print(sorted_df)

结果如下:

    English  math  name     physics  Python  sex  xuehao 
1        72    25    张海        100     100   男  199901 
4        88    44  赵大强         95      54   男  199902 
6        91    13    李梅         54      76   女  199903 
2       100    26  吉建军         89      78   男  199904

实际上,在日常计算中,按值排序较多。例如,按分数高低、学号、性别排序,这时可以使用sort_values()。DataFrame的sort_values()是按值排序的函数,它接收一个by参数指定排序的列名。

sorted_df2=df.sort_values(by='English')    #按值排序 
print(sorted_df2)

运行后可见结果同上。

English的值相同时如何排列呢?实际上也可以通过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

可见,col1值相同时按照col2值再排序。这里我们可以认为col1是第一排序条件,col2是第二排序条件,只有col1值相同时才用到第二排序条件。

sort_values()提供了一个从mergesort(合并排序)、heapsort(堆排序)和quicksort(快速排序)中选择排序算法的参数kind。其中mergesort是唯一稳定的算法。

import pandas as pd 
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)
  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。