赞
踩
Pandas 是一个灵活而强大的Python数据分析 / 操作库,提供快速、灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的使用既简单又直观,功能十分强大。
本文讲解一下排序、排名的函数,这些经常使用的内容。
所有函数的参数中,只添加了常用的几个,其它的可以去看官方文档。
根据行或列的索引按照字典的顺序进行排序
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))
结果:
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:
df = pd.Series([3, 5, 1, 7])
print(df, '\n')
print(df.sort_values(), '\n')
print(df.sort_values(ascending=False))
可得:
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))
可得:
排名会有一个排名值(从1开始,一直到数组中有效数据的数量),打印出的值就是由排名值代替原有的数据,位置并不改变即索引不改变。
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。
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文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。