Pandas 是一个灵活而强大的Python数据分析 / 操作库,提供快速、灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的使用既简单又直观,功能十分强大。
本文讲解一下排序、排名的函数,这些经常使用的内容。
所有函数的参数中,只添加了常用的几个,其它的可以去看官方文档。
排序
1.按索引:sort_index(axis=0, ascending=True)
根据行或列的索引按照字典的顺序进行排序
- Series 类型中:
只有左边一列是索引,使用Series.sort_index()就行了:
import numpy as np
import pandas as pd
df = pd.Series([1, 2, 3], index=["a", "c", "b"])
print(df.sort_index())
默认按升序排序:
若是要按降序排序,则要加上 ascending=False :
print(df.sort_index(ascending=False))
结果:
- DataFrame 类型中:
除了最左边的行索引,还有最上面的列索引。可以指定是按行索引排列还是按列索引排列:
df = pd.DataFrame(np.arange(12).reshape((4,3)), columns=['c','a','b'],
index=['D','B','C','A'])
print(df, '\n')
print(df.sort_index(), '\n')
print(df.sort_index(axis=1), '\n')
print(df.sort_index(axis=1, ascending=False))
axis 便是指定按行还是按列索引的参数,默认为 0:
2.按值:sort_values()
- Series 类型中:
Series.sort_values(axis=0, ascending=True)
只有一列值,使用Series.sort_values()就行了:
df = pd.Series([3, 5, 1, 7])
print(df, '\n')
print(df.sort_values(), '\n')
print(df.sort_values(ascending=False))
可得:
- DataFrame 类型中:
DataFrame.sort_values(by, axis=0, ascending=True)
不止一列值,by 指定一个索引值,axis 指定行或列:
values = [[9,3,1],[1,8,4],[2,0,5]]
df = pd.DataFrame(values, index=['0', '2', '1'], columns=['c', 'a', 'b'])
print(df, '\n')
print(df.sort_values(by='a'), '\n')
print(df.sort_values(by='2', axis=1))
可得:
排名:rank()
排名会有一个排名值(从1开始,一直到数组中有效数据的数量),打印出的值就是由排名值代替原有的数据,位置并不改变即索引不改变。
- Series 类型中:
Series.rank(axis=0, method=‘average’, ascending=True)
df = pd.Series([5, 9, -2, 1, 1, 7])
print(df, '\n')
print(df.rank(), '\n') # 若有相同的数,默认取其排名平均作为值
print(df.rank(method="first")) # 若有相同的数,根据值在数组中出现的顺序进行排名
数组中的数字 5 在整个数组中排第 4 (默认按升序的规则确认排名),可以看结果:
图片里面中间部分的数据中,两个 2.5 是数组中两个 1 的平均排名;最下面部分的数据中,两个 1 的排名就按其位置来确认,第一个 1 的排名为 2.0,第二个 1 的排名为 3.0。
- DataFrame 类型中:
DataFrame.rank(axis=0, method=‘average’, ascending=True)
df = pd.DataFrame({'b':[4,7,-1,2], 'a':[0,1,0,1], 'c':[-3,6,9,-3]})
print(df, '\n')
print(df.rank(), '\n') # 默认对每列进行排名
print(df.rank(axis=1)) # 进行每行的排名
结果:
method方法的选项:
method | 说明 |
---|---|
average | 在相等分组中,为各个值分配平均排名 (默认) |
min | 使用整个分组的最小排名 |
max | 使用整个分组的最大排名 |
first | 按值在原始数据中的出现顺序分配排名 |
dense | 类似 min,但是组之间的等级总是增加1 |
使用 min 就是整数部分不变,把小数点后面的数去除;使用 max 就是把小数点后面的数去除,进位给整数。
更多详情可以看官方文档:Pandas文档