约定第一行代码

import numpy as np
import pandas as pd

排序和排名

根据条件对Series对象或DataFrame对象的值排序(sorting)和排名(ranking)是一种重要的内置运算

接下来为大家介绍如何使用pandas对象的:sort_index() / sort_values() / rank() 方法

一、对Series排序

对Series对象排序是最常用的,可以根据Series对象的索引、值排序

根据索引排序

se1=pd.Series(np.arange(10,13),index=[1,3,2])
se1.sort_index()

#代码结果
1    10
2    12
3    11
dtype: int32

根据字符索引排序

se2=pd.Series(np.arange(0,3),index=['c','d','a'])
se2.sort_index()

#代码结果
a    2
c    0
d    1
dtype: int32

按降序排序

se2.sort_index(ascending=False)

#代码结果
d    1
c    0
a    2
dtype: int32

按值排序

se3=pd.Series([3,-5,7])
se3.sort_values()

#代码结果
1   -5
0    3
2    7
dtype: int64

NaN值会放在Series末尾

se4=pd.Series([3,np.nan,-7,np.nan,5])
se4.sort_values()

#代码结果
2   -7.0
0    3.0
4    5.0
1    NaN
3    NaN
dtype: float64

二、对DataFrame排序

通过axis参数可以对任意轴排序

df1=pd.DataFrame(np.arange(9).reshape(3,3),
                index=list("bac"),
                columns=list("yzx"))
df1

代码结果

yzx
b012
a345
c678
df1.sort_index()

代码结果

yzx
a345
b012
c678
df1.sort_index(axis=1)

代码结果

xyz
b201
a534
c867

根据一个列的值来排序

df2=pd.DataFrame({'a':[20,3,3],'b':[1,-6,18]})
df2.sort_values(by='b')

代码结果

ab
13-6
0201
2318

对多个列来排序

df2.sort_values(by=['a','b'])
ab
13-6
2318
0201

三、排名

排名是根据Series对象或DataFrame的某几列的值进行排名,.rank(method=,ascending=,…)返回对值的排名。但需要十分注意如何处理出现相同的值

平均排名

为相同的值分配一个平均排名

se5=pd.Series([2,3,7,5,3,7])
se5.rank()

#代码结果
0    1.0
1    2.5
2    5.5
3    4.0
4    2.5
5    5.5
dtype: float64

顺序排名

对于相同的值按照出现的顺序排名

se5.rank(method="first")

#代码结果
0    1.0
1    2.0
2    5.0
3    4.0
4    3.0
5    6.0
dtype: float64

最小值排名

对于相同的值都取小的排名

se5.rank(method="min",ascending=False)

#代码结果
0    6.0
1    4.0
2    1.0
3    3.0
4    4.0
5    1.0
dtype: float64

最大值排名

对于相同的值都取大的排名

se5.rank(method="min",ascending=False)

#代码结果
0    6.0
1    4.0
2    1.0
3    3.0
4    4.0
5    1.0
dtype: float64

降序排名

se5.rank(method="first",ascending=False)

#代码结果
0    6.0
1    4.0
2    1.0
3    3.0
4    5.0
5    2.0
dtype: float64

世界因代码而改变 Peace Out
世界因代码而改变 Peace Out
最后修改:2020 年 10 月 07 日 03 : 20 PM
如果觉得我的文章对你有用,请随意赞赏