Python pandas排序与排名详解:Series和DataFrame操作指南
本文详细介绍Python中pandas库的排序与排名功能。涵盖Series和DataFrame按索引或值排序的方法,包括sort_index和sort_values的使用及注意事项。同时解析rank函数的多种排名策略(如first、min、max、average)及处理重复值和平局的情况,帮助开发者高效处理数据排序与排名需求。
在实际数据处理中,我们经常需要根据索引顺序或数值大小对Series和DataFrame对象进行排序或排名操作。
pandas排序操作详解
一、排序操作
pandas库提供了sort_index方法,允许用户根据行索引或列索引,按照字典序规则对数据进行排序。
a、Series对象的排序
1、基于索引的排序
#定义一个Series
s = Series([1,2,3],index=["a","c","b"])
#对Series的索引进行排序,默认是升序
print(s.sort_index())
'''
a 1
b 3
c 2
'''
#对索引进行降序排序
print(s.sort_index(ascending=False))
'''
c 2
b 3
a 1
'''
2、基于数值的排序
s = Series([np.nan,1,7,2,0],index=["a","c","e","b","d"])
#对Series的值进行排序,默认是按值的升序进行排序的
print(s.sort_values())
'''
d 0.0
c 1.0
b 2.0
e 7.0
a NaN
'''
#对Seires的值进行降序排序
print(s.sort_values(ascending=False))
'''
e 7.0
b 2.0
c 1.0
d 0.0
a NaN
'''
在对Series的值进行排序时,无论选择升序还是降序,缺失值(NaN)始终会被排列在序列的最后位置。
b、DataFrame对象的排序
1、基于索引的排序
a = np.arange(9).reshape(3,3)
data = DataFrame(a,index=["0","2","1"],columns=["c","a","b"])
#按行的索引升序进行排序,默认按行,升序
print(data.sort_index())
'''
c a b
0 0 1 2
1 6 7 8
2 3 4 5
'''
#按行的索引按降序进行排序
print(data.sort_index(ascending=False))
'''
c a b
2 3 4 5
1 6 7 8
0 0 1 2
'''
#按列升序的索引进行排序
print(data.sort_index(axis=1))
'''
a b c
0 1 2 0
2 4 5 3
1 7 8 6
'''
#按列降序的索引进行排序
print(data.sort_index(ascending=False))
'''
c a b
2 3 4 5
1 6 7 8
0 0 1 2
'''
2、基于数值的排序
a = [[9,3,1],[1,2,8],[1,0,5]]
data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"])
#按指定列的值大小顺序进行排序
print(data.sort_values(by="c"))
'''
c a b
2 1 2 8
1 1 0 5
0 9 3 1
'''
print(data.sort_values(by=["c","a"]))
'''
c a b
1 1 0 5
2 1 2 8
0 9 3 1
'''
#按指定行值进行排序
print(data.sort_values(by="0",axis=1))
'''
b a c
0 1 3 9
2 8 2 1
1 5 0 1
'''
需要注意的是,对DataFrame进行按值排序时,必须通过by参数指定具体的列名或行名。若未指定by参数,程序将抛出TypeError错误,提示缺少必需的位置参数'by'。当使用by参数指定多列(或多行)排序时,排序优先级以列表中的第一个元素为准;后续元素可能不生效,因为无法同时满足对第一列升序且对第二列不同方向排序的逻辑冲突。此外,若要对行值进行排序,必须显式设置axis=1参数,否则默认按列索引查找会因找不到对应索引而报错,axis=1明确指定了操作对象为行索引。
pandas排名功能解析
二、排名操作
排名功能与排序类似,但会生成一个从1开始、至有效数据数量结束的排名值。其原理类似于numpy.argsort的间接排序索引,但rank函数提供了更灵活的规则来打破平局关系。
a、Series对象的排名
s = Series([1,3,2,1,6],index=["a","c","d","b","e"])
#默认是根据值的大小进行平均排名
'''
1是最小的,所以第一个1排在第一,第二个1排在第二
因为取的是平均排名,所以1的排名为1.5
'''
print(s.rank())
'''
a 1.5
c 4.0
d 3.0
b 1.5
e 5.0
'''
#根据值在数组中出现的顺序进行排名
print(s.rank(method="first"))
'''
a 1.0
c 4.0
d 3.0
b 2.0
e 5.0
'''
rank函数的method参数支持多种策略:'first'表示按值在原始数据中出现的顺序分配排名;'min'使用分组内的最小排名值;'max'使用分组内的最大排名值;'average'(默认值)则使用平均排名。此外,可通过ascending参数控制排名是升序还是降序排列。
b、DataFrame对象的排名
a = [[9, 3, 1], [1, 2, 8], [1, 0, 5]]
data = DataFrame(a, index=["0", "2", "1"], columns=["c", "a", "b"])
print(data)
'''
c a b
0 9 3 1
2 1 2 8
1 1 0 5
'''
#默认按列进行排名
print(data.rank())
'''
c a b
0 3.0 3.0 1.0
2 1.5 2.0 3.0
1 1.5 1.0 2.0
'''
#按行进行排名
print(data.rank(axis=1))
'''
c a b
0 3.0 2.0 1.0
2 1.0 2.0 3.0
1 2.0 1.0 3.0
'''
DataFrame的排名操作中,method参数和ascending参数的设置逻辑与Series完全一致。
以上内容涵盖了pandas中排序与排名的核心用法,希望能为读者的数据分析工作提供实用帮助,欢迎继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













