当前位置: 首页 > news >正文

数据分析:排序

📌 题目一:DA44 某店铺消费最多的前三名用户

✅ 题目描述

现有某店铺会员消费情况 sales.csv,包含以下字段:

  • user_id:会员编号
  • recency:最近一次消费距离当天的天数
  • frequency:一段时间内消费的次数
  • monetary:一段时间内消费的总金额

任务:统计消费金额(monetary)最多的前3名用户。

📥 输入描述

从当前目录读取 sales.csv 文件。

📤 输出描述

输出消费金额最高的前3名用户信息,索引从0开始重新编号(即重置索引)。


💻 代码实现

import pandas as pd# 读取数据
df = pd.read_csv('sales.csv')# 按 monetary 降序排序,取前3行,并重置索引
result = df.sort_values(by='monetary', ascending=False).reset_index(drop=True).head(3)# 打印结果
print(result)

等价写法

print(df.sort_values(by='monetary', ascending=False).reset_index(drop=True)[:3])

🔍 解析

  1. sort_values(by='monetary', ascending=False)
    • 按照 monetary 字段进行降序排序(金额从高到低)。
  2. .head(3) 或 [:3]
    • 取前3条记录。
  3. .reset_index(drop=True)
    • 重置行索引为 0, 1, 2...,便于规范输出;drop=True 表示丢弃原索引。

✅ 输出格式与示例一致,符合“索引从0开始”的要求。


🧠 扩展知识点

方法说明
sort_values()支持单列或多列排序,如 by=['A', 'B']
ascending=False控制升序/降序
reset_index()重置索引,常用于排序后规范化
drop=True避免旧索引变成新列

📌 常见错误提醒

  • 忘记 reset_index() → 索引仍是原始位置,不符合题意。
  • 使用 inplace=True 而不打印 → print(df.sort_values(...)) 不会生效。

📌 题目二:DA45 按等级递增查看牛客网用户信息

✅ 题目描述

给定 Nowcoder.csv 文件,字段如下:

  • Nowcoder_ID:用户ID
  • Name:用户名
  • Level:等级(1~7)
  • Achievement_value:成就值
  • Num_of_exercise:刷题量
  • Graduate_year:毕业年份
  • Language:常用语言

任务:按等级(Level)升序排列,并输出全部数据(含行号)。


📥 输入描述

从当前目录读取 Nowcoder.csv

📤 输出描述

输出按 Level 升序排列的完整数据表,包括行号(即默认索引)。


💻 代码实现

import pandas as pd# 设置显示选项,防止输出被截断
pd.set_option('display.width', 300)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)# 读取数据
df = pd.read_csv('Nowcoder.csv')# 按 Level 升序排序(inplace=True 直接修改原 DataFrame)
df.sort_values(by='Level', inplace=True)# 打印结果(自动带行号)
print(df)

🔍 解析

  1. sort_values(by='Level', inplace=True)
    • 对 Level 字段升序排序(默认 ascending=True),并直接在原 DataFrame 上修改。
  2. pd.set_option(...)
    • display.width: 设置控制台显示宽度
    • max_rowsmax_columns: 允许显示所有行和列,避免省略(...)或折叠
  3. print(df) 自动带行号
    • Pandas DataFrame 默认显示行索引(即行号),满足“包括行号”要求。

🧠 扩展知识点

技巧说明
inplace=True原地修改,节省内存;但会丢失原始顺序
显示设置在处理大数据或宽表时非常关键
多字段排序如 by=['Level', 'Achievement_value'] 可实现次要排序

📌 替代写法(不修改原数据)

result = df.sort_values(by='Level').reset_index(drop=True)
print(result)

📘 总结对比

项目DA44DA45
排序字段monetaryLevel
排序方式降序 (ascending=False)升序(默认)
是否重置索引是(要求索引从0开始)否(但用了 inplace 修改原数据)
输出数量前3条全部数据
显示控制无特殊要求使用 pd.set_option 防止截断
关键函数sort_valuesheadreset_indexsort_valuespd.set_option

🛠️ 实用 Pandas 排序技巧总结

# 1. 单字段降序
df.sort_values(by='monetary', ascending=False)# 2. 多字段排序:先按 Level 升序,再按成就值降序
df.sort_values(by=['Level', 'Achievement_value'], ascending=[True, False])# 3. 保留前 N 条
df.nlargest(3, 'monetary')  # 等价于 sort + head
df.nsmallest(5, 'recency')# 4. 重置索引(常用)
df.reset_index(drop=True, inplace=True)

✅ 学习建议

  1. 理解 inplace 参数的影响:是否希望保留原始数据?
  2. 注意输出格式要求:是否需要重置索引?是否要显示全部内容?
  3. 善用 pd.set_option:调试时防止信息被隐藏。
  4. 练习多字段排序:实际业务中更常见。

🎯 进阶思考
如果多个用户的 monetary 相同,如何进一步按 frequency 排序?
👉 答案:df.sort_values(by=['monetary', 'frequency'], ascending=[False, False])


文章转载自:

http://6mmvfNRu.jwfqq.cn
http://9jAN6tjZ.jwfqq.cn
http://747yjnpR.jwfqq.cn
http://uF6TTbaV.jwfqq.cn
http://lmgFI8hU.jwfqq.cn
http://FqnGpcb6.jwfqq.cn
http://98gNz1yw.jwfqq.cn
http://n3WkAOzN.jwfqq.cn
http://UmD6CqT1.jwfqq.cn
http://uz5wrMWC.jwfqq.cn
http://DPSc6deI.jwfqq.cn
http://hs4aFaLy.jwfqq.cn
http://adoTEXW1.jwfqq.cn
http://LIAp7AHJ.jwfqq.cn
http://KMCVpWaq.jwfqq.cn
http://mk6hzIBK.jwfqq.cn
http://WMyEPl1y.jwfqq.cn
http://sOMRjfmA.jwfqq.cn
http://OHMDji4x.jwfqq.cn
http://HLNhVZa6.jwfqq.cn
http://j4Xv12xy.jwfqq.cn
http://VCDySnAK.jwfqq.cn
http://azkZlfQL.jwfqq.cn
http://TZYN4f1H.jwfqq.cn
http://VAXzR7ba.jwfqq.cn
http://CsQSDEhW.jwfqq.cn
http://hHb9en6e.jwfqq.cn
http://WaPOCxEY.jwfqq.cn
http://wq2WS6xu.jwfqq.cn
http://UchNEDLD.jwfqq.cn
http://www.dtcms.com/a/383593.html

相关文章:

  • C语言---循环结构
  • 【底层机制】emplace_back 为什么引入?是什么?怎么实现的?怎么正确用?
  • 基于LSTM深度学习的电动汽车电池荷电状态(SOC)预测
  • 机器学习周报十三
  • 记录word插入文字/图片,生成新word并转为pdf
  • 【ROS2】Concept(Basic)
  • Level Set(水平集)算法——形象化讲解
  • 45.sed,awk详解及相关案例
  • 聊一下贪心算法
  • 磁共振成像原理(理论)7:射频回波 (RF Echoes)-双脉冲回波
  • Python实战:实现监测抖音主播是否开播并录屏
  • MySQL中InnoDB索引使用与底层原理
  • 全网首款数学建模交互AI应用-持续更新
  • 飞牛NAS本地挂载夸克网盘、接入飞牛影视教程
  • 音视频学习(六十五):fmp4
  • 【STM32】串口的阻塞、中断、DMA收发
  • win10系统 文件夹被占用无法删除
  • LawGPT:基于中文法律知识的大模型
  • 手搓多模态-10 旋转位置编码的原理和实现
  • C# --- dispose机制与using关键字
  • HakcMyVM-Aurora
  • Flask学习笔记(一)
  • MobaXterm软件访问ZYNQ板卡的Linux系统
  • 基于vLLM与YOLO的智能图像分类系统
  • 标准CAN帧介绍
  • 蚂蚁矿机S19 Pro 104T技术参数解析及性能分析
  • 一小时解决RabbitMQ面试题
  • HBM4量产就绪|2026年AI与数据中心新标配
  • 细粒度图像分类的可解释性Finer-CAM
  • C++中多线程core的问题分析和总结