熊熊出没 发表于 2023-5-22 11:38:14

【pandas基础】--数据排序

pandas的数据排序可以帮助我们更好地理解和分析数据。
通过对数据进行排序,我们可以提取出特定的信息,例如最大值、最小值、中位数、众数等等,从而更准确地识别数据的特征和特点。
此外,数据排序还可以帮助我们更好地进行数据可视化,例如绘制直方图、箱线图等等,进一步帮助我们对数据进行解读和分析。
总之,数据排序在数据处理和分析中起着非常重要的作用。
1. 索引排序

pandas的数据集DataFrame默认的索引是从0开始的数字,默认升序排列。
import pandas as pd

df = pd.DataFrame(
    {
      "name": ["小华", "小红", "小明"],
      "gender": ["男", "女", "男"],
      "score": ,
    }
)

dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1681701473153-d8db7317-6655-4e10-b658-52a3661702dc.png#averageHue=%23e7e1e1&clientId=u02858411-33e5-4&from=paste&height=133&id=u30b76a0a&originHeight=133&originWidth=232&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5728&status=done&style=stroke&taskId=u31677c23-aec4-4dd3-baf8-bc2084735d9&title=&width=232
当然,除了默认索引,也可以手动设置索引,手动设置索引的话,索引的顺序不会自动排列。
比如:
df = pd.DataFrame(
    {
      "name": ["小华", "小红", "小明"],
      "gender": ["男", "女", "男"],
      "score": ,
    },
    index=,
)

df        https://cdn.nlark.com/yuque/0/2023/png/2235414/1681701659474-8c805e33-48a5-4482-94e8-4a7108f28e85.png#averageHue=%23e8e2e1&clientId=u02858411-33e5-4&from=paste&height=140&id=uc7752500&originHeight=140&originWidth=226&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5860&status=done&style=stroke&taskId=u3d6542d6-467b-43c9-b864-e1763590def&title=&width=226
1.1 索引升序

此时,就可以通过sort_index函数对数据集进行排序。默认是升序:
df.sort_index() # 升序https://cdn.nlark.com/yuque/0/2023/png/2235414/1681703903644-752aa01c-175f-4264-88e3-89fc8fd699c3.png#averageHue=%23efeaea&clientId=u02858411-33e5-4&from=paste&height=178&id=ue922c2f6&originHeight=178&originWidth=619&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30956&status=done&style=stroke&taskId=ue5ddc88e-b589-4d53-83ca-8828eeb22fd&title=&width=619
1.2 索引降序

设置ascending=False,则按照索引降序排列。
df.sort_index(ascending=False) # 降序https://cdn.nlark.com/yuque/0/2023/png/2235414/1681703919833-0a0cfca7-8fd0-41c6-9832-d3733bed60b8.png#averageHue=%23f1eded&clientId=u02858411-33e5-4&from=paste&height=198&id=ud09e54cb&originHeight=198&originWidth=640&originalType=binary&ratio=1&rotation=0&showTitle=false&size=31086&status=done&style=stroke&taskId=u54c325c8-9a8e-4cd9-b074-d014c5a5aa9&title=&width=640
2. 值排序

除了索引排序,使用更多的是值排序,也就是按照各个列的值来排序。
2.1 单列的值排序

按照单个列的值排序:(英语成绩由高到低排序)
df = pd.DataFrame(
    {
      "name": ["小华", "小红", "小明"],
      "math": ,
      "english": ,
    },
)

df.sort_values(by="english", ascending=False)https://cdn.nlark.com/yuque/0/2023/png/2235414/1681704155602-3a0aed76-9a74-42e3-91fb-39bfa62ba8b9.png#averageHue=%23eeeae9&clientId=u02858411-33e5-4&from=paste&height=164&id=u35baa30a&originHeight=164&originWidth=640&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30051&status=done&style=stroke&taskId=u46f6ef6f-39ed-47a3-a66f-da8b6a859d9&title=&width=640
2.2 多列的值排序

从上面可以看出,小华和小明的英语成绩一样,这时,可以用多列排序,先按照英语排序,然后再按照数学成绩排序,得到更合理的排序结果。
df.sort_values(by=["english", "math"], ascending=False)https://cdn.nlark.com/yuque/0/2023/png/2235414/1681704617127-7cefd8b9-2740-4cac-a8d7-e47275b9d4c1.png#averageHue=%23efebeb&clientId=u02858411-33e5-4&from=paste&height=174&id=u098e93ac&originHeight=174&originWidth=638&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30507&status=done&style=stroke&taskId=uad679648-26e6-4b08-a68a-eb88abf9a3f&title=&width=638
3. 最大最小值

通过排序也虽然也可以得到数据集中最大和最小的几个值,但是pandas还给我们提供了两个更加简单的函数,
专门用来获取最大值和最小值。
也就是:nlargest 和 nsmallest。
3.1 nlargest

同样使用上面的数据,获取数学成绩前两名(成绩从高到低)。
df = pd.DataFrame(
    {
      "name": ["小华", "小红", "小明"],
      "math": ,
      "english": ,
    },
)

df.nlargest(2, "math")https://cdn.nlark.com/yuque/0/2023/png/2235414/1681712459853-235b04c6-bf83-4bd8-a33c-c207bf1b8edb.png#averageHue=%23efecec&clientId=u02858411-33e5-4&from=paste&height=166&id=ub8b15ed4&originHeight=166&originWidth=614&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27141&status=done&style=stroke&taskId=u0f76cb52-d5f5-4f12-bd86-6e06dd57d86&title=&width=614
3.2 nsmallest

获取数学成绩后两名(成绩从低到高)。
df.nsmallest(2, "math")https://cdn.nlark.com/yuque/0/2023/png/2235414/1681712802372-c052c990-464a-4e8a-910b-19a7c79d8b25.png#averageHue=%23f0eded&clientId=u02858411-33e5-4&from=paste&height=174&id=ucdf389b7&originHeight=174&originWidth=620&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27766&status=done&style=stroke&taskId=u69e68122-1d36-458d-ab3e-f021197d1f4&title=&width=620
4. 数据排名

排名和排序有些细微的区别,排序只是按照值的大小顺序排列,如果两个值一样也只是简单的保持其原来的先后顺序。
而排名则和具体情况相关联,比如,有时候两个并列第一名后,后续的就是第三名,第二名空缺出来;也有时候并列名次存在时不影响后续的排名。
下面示例演示三种常用的排名方式:
4.1 顺序排名

顺序排名(method='first')和排序一样。
df = pd.DataFrame(
    {
      "name": ["小华", "小红", "小明", "小张", "小李"],
      "score": ,
    },
)

df["成绩排名"] = df.score.rank(method='first', ascending=False)
df["成绩排名"] = df["成绩排名"].astype(int)
df.sort_values("成绩排名")https://cdn.nlark.com/yuque/0/2023/png/2235414/1681716151220-8fb2d4fc-4b5e-44e6-ac93-23c4c09e3a35.png#averageHue=%23efecec&clientId=u02858411-33e5-4&from=paste&height=224&id=u3883b992&originHeight=224&originWidth=566&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36928&status=done&style=stroke&taskId=u8374eaaa-c6a4-4ee5-b3c8-48dddc3b632&title=&width=566
成绩相同时,按照原数据集中的顺序依次排列。
4.2 跳跃排名

跳跃排名(method='min'),并列名次存在时,后续的名次会跳跃。
df["成绩排名"] = df.score.rank(method='min', ascending=False)
df["成绩排名"] = df["成绩排名"].astype(int)
df.sort_values("成绩排名")https://cdn.nlark.com/yuque/0/2023/png/2235414/1681716265705-d2b4bfcd-f767-4377-8596-98d380b4e197.png#averageHue=%23eeecec&clientId=u02858411-33e5-4&from=paste&height=220&id=ud8136829&originHeight=220&originWidth=559&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36604&status=done&style=stroke&taskId=uba971237-82a9-4fa1-a305-04843505e69&title=&width=559
平时的考试一般会按照这种排名方式。
4.3 密集排名

密集排名(method='dense'),并列名次存在时,后续的名次仍然依次下去。
df["成绩排名"] = df.score.rank(method='dense', ascending=False)
df["成绩排名"] = df["成绩排名"].astype(int)
df.sort_values("成绩排名")https://cdn.nlark.com/yuque/0/2023/png/2235414/1681716387786-19173463-d78a-4361-8e2d-98154be6f9c6.png#averageHue=%23eeecec&clientId=u02858411-33e5-4&from=paste&height=221&id=ube53f110&originHeight=221&originWidth=561&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36552&status=done&style=stroke&taskId=udadf53cf-a930-4370-a9bd-ed48e38ec1f&title=&width=561
名次存在并列时,不影响后续的排名。
5. 总结回顾

本篇主要介绍了pandas数据排序的各种常用方法,排序之后的数据更容易查看,分析和比较,是分析前了解数据的必要手段。
上面只是介绍了各个排序相关函数最常用的参数,如果有更复杂的排序需求,请参考pandas的文档,也欢迎留言探讨。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【pandas基础】--数据排序