Pandas的排序、排名方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44613063/article/details/87737387

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文档

猜你喜欢

转载自blog.csdn.net/weixin_44613063/article/details/87737387
今日推荐