首页Python【Python数据分析】2...

【Python数据分析】21.排名(Sorting)与排序(Ranking)


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————-————————————-

1.排序(Sorting):

按某种标准对数据集进行排序是Pandas另一个重要的内置操作。

如果需要按行或列索引进行字典型排序,需要使用sort_index()sort_values()方法,两个方法均返回一个新的、排序好的对象:

1.1sort_index()方法

使用sort_index()方法对索引进行排序。
  • Series类型

 1>>> obj = pd.Series(np.arange(4), index=["d""a""b""c"])
2>>> obj
3d    0
4a    1
5b    2
6c    3
7dtype: int32
8
9>>> obj.sort_index()
10a    1
11b    2
12c    3
13d    0
14dtype: int32
  • DataFrame类型

 1>>> df = pd.DataFrame(np.arange(8).reshape((24)),index=[31],columns=["d""a""b""c"])
2>>> df
3   d  a  b  c
43  0  1  2  3
51  4  5  6  7
6
7>>> df.sort_index()
8   d  a  b  c
91  4  5  6  7
103  0  1  2  3

通过设置 axis 参数,可以在指定轴上按索引进行排序。

1>>> df.sort_index(axis=1)
2   a  b  c  d
33  1  2  3  0
41  5  6  7  4

默认情况下,数据按升序排序,通过设置ascending=False可以按降序排序。

1>>> df.sort_index(axis=1 , ascending=False)
2   d  c  b  a
33  0  3  2  1
41  4  7  6  5

1.2sort_values()方法

使用sort_values()方法按进行排序。

  • Series类型

 1>>> obj = pd.Series([47, -32])
2>>> obj
30    4
41    7
52   -3
63    2
7dtype: int64
8
9>>> obj.sort_values()
102   -3
113    2
120    4
131    7
14dtype: int64

如果有缺失值,默认排序在最后。也可以使用 na_position 选项将缺失值排序到开头。

 1>>> obj = pd.Series([4, np.nan, 7, np.nan, -32])
2>>> obj
30    4.0
41    NaN
52    7.0
63    NaN
74   -3.0
85    2.0
9dtype: float64
10
11>>> obj.sort_values()
124   -3.0
135    2.0
140    4.0
152    7.0
161    NaN
173    NaN
18dtype: float64
19
20>>> obj.sort_values(na_position='first')
211    NaN
223    NaN
234   -3.0
245    2.0
250    4.0
262    7.0
27dtype: float64
  • DataFrame类型

在对 DataFrame 进行排序时,可以使用一列或多列中的数据作为排序键。为此,需要将一个或多个列名(要按多列排序,请传递名称列表)传递给 sort_values

 1>>> df = pd.DataFrame({"b": [47, -32], "a": [0101]})
2>>> df
3   b  a
40  4  0
51  7  1
62 -3  0
73  2  1
8
9>>> df.sort_values("b")
10   b  a
112 -3  0
123  2  1
130  4  0
141  7  1
15
16>>> df.sort_values(by=["a""b"])
17   b  a
182 -3  0
190  4  0
203  2  1
211  7  1

2.排名(Ranking):

排名是对数组中有效数据点分配排名,从最低值开始。

默认情况下,rank 通过对每个组分配平均排名来打破平级关系。

2.1 Series类型

 1>>> obj = pd.Series([7, -574204])
2>>> obj
30    7
41   -5
52    7
63    4
74    2
85    0
96    4
10dtype: int64
11
12>>> obj.rank()
130    6.5
141    1.0
152    6.5
163    4.5
174    3.0
185    2.0
196    4.5
20dtype: float64

默认情况下,数据按升序排序,通过设置ascending=False可以按降序排序。

1>>> obj.rank(ascending=False)
20    1.5
31    7.0
42    1.5
53    3.5
64    5.0
75    6.0
86    3.5
9dtype: float64

也可以根据在数据中的观察顺序进行排名。

打破平级关系的方法主要有以下几种:

方法
说明
“average” 默认值,在每个组中分配平均排名
“min” 对整个组使用最小排名
“max” 对整个组使用最大排名
“first”

按照值在数据中出现的次序分配排名

“dense” 类似于 method=”min”,但是组之间的排名总是增加 1,而不是组中相等元素的数量

下面示例中,条目 0 和 2 没有使用平均排名 6.5,而是将它们设置为 6 和 7,这是因为数据中标签 0 在标签 2 之前。

1>>> obj.rank(method="first")
20    6.0
31    1.0
42    7.0
53    4.0
64    3.0
75    2.0
86    5.0
9dtype: float64


2.2 DataFrame类型

DataFrame 可以计算行或列的排名。

 1>>> df = pd.DataFrame({"b": [4.37, -32], "a": [0101],"c": [-258, -2.5]})
2>>> df
3     b  a    c
40  4.3  0 -2.0
51  7.0  1  5.0
62 -3.0  0  8.0
73  2.0  1 -2.5
8
9>>> df.rank()
10     b    a    c
110  3.0  1.5  2.0
121  4.0  3.5  3.0
132  1.0  1.5  4.0
143  2.0  3.5  1.0
15
16>>> df.rank(axis=1)
17     b    a    c
180  3.0  2.0  1.0
191  3.0  1.0  2.0
202  1.0  2.0  3.0
213  3.0  2.0  1.0


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments