行者孙Python

烹制篇-Day22|排序装盘:sort_values 排序分析,找极值

📖 知识点

1. sort_values () 排序

按某一列把数据排好序:

 

# 按"销量"升序(从小到大,默认)
df.sort_values("销量")
# 按"销量"降序(从大到小)
df.sort_values("销量", ascending=False)

 

2. 排序 + 找极值

排序后取前几行,就是极值所在:

 

# 销量最高的前3道菜(降序后取头3行)
df.sort_values("销量", ascending=False).head(3)
# 销量最低的前3道菜(升序后取头3行)
df.sort_values("销量").head(3)

 

3. 多列排序

 

# 先按销量降序,销量相同再按价格升序
df.sort_values(["销量", "价格"], ascending=[False, True])

 

完整示例

 

import pandas as pd

data = {
    "菜名": ["麻婆豆腐", "葱爆羊肉", "回锅肉", "白切鸡", "糖醋鱼"],
    "销量": [60, 40, 80, 30, 50],
}
df = pd.DataFrame(data)

# 销量最高的前2道菜
print(df.sort_values("销量", ascending=False).head(2))

 

运行输出:

 

    菜名  销量
2  回锅肉   80
0  麻婆豆腐  60

 

💡 理解

  • 降序 + head(n) = 找最大的 n 条(销量最高)

  • 升序 + head(n) = 找最小的 n 条(销量最低)

  • 多列排序用列表控制,可同时按多个指标排

⚠️ 易错提醒

  1. sort_values 默认返回新表,不改原表

  2. ascending=False 是降序(从大到小),默认升序

  3. 多列排序时 ascending 也要写成列表,一一对应

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一份数据(菜名、销量、价格)

  2. 用 sort_values("销量", ascending=False) 按销量降序

  3. 用降序 + head 找销量最高的前 2 道菜

  4. 用升序 + head 找销量最低的前 2 道菜

  5. 用多列排序(销量降序 + 价格升序)

  6. 打印结果

参考代码

 

import pandas as pd

data = {
    "菜名": ["麻婆豆腐", "葱爆羊肉", "回锅肉", "白切鸡", "糖醋鱼"],
    "销量": [60, 40, 80, 30, 50],
    "价格": [20, 35, 25, 30, 40],
}
df = pd.DataFrame(data)
print("===== 原表 =====")
print(df)

print("\n===== 按销量降序 =====")
print(df.sort_values("销量", ascending=False))

print("\n===== 销量最高的前2道菜 =====")
print(df.sort_values("销量", ascending=False).head(2))

print("\n===== 销量最低的前2道菜 =====")
print(df.sort_values("销量").head(2))

print("\n===== 多列排序:销量降序+价格升序 =====")
print(df.sort_values(["销量", "价格"], ascending=[False, True]))

 

运行输出:

 

===== 原表 =====
   菜名  销量  价格
0  麻婆豆腐  60   20
1  葱爆羊肉  40   35
2  回锅肉   80   25
3  白切鸡   30   30
4  糖醋鱼   50   40

===== 按销量降序 =====
   菜名  销量  价格
2  回锅肉   80   25
0  麻婆豆腐  60   20
4  糖醋鱼   50   40
1  葱爆羊肉  40   35
3  白切鸡   30   30

===== 销量最高的前2道菜 =====
   菜名  销量  价格
2  回锅肉   80   25
0  麻婆豆腐  60   20

===== 销量最低的前2道菜 =====
   菜名  销量  价格
3  白切鸡   30   30
1  葱爆羊肉  40   35

===== 多列排序:销量降序+价格升序 =====
   菜名  销量  价格
2  回锅肉   80   25
0  麻婆豆腐  60   20
4  糖醋鱼   50   40
1  葱爆羊肉  40   35
3  白切鸡   30   30

 

🧠 思考题

  1. 降序 +head(n) 和 升序 +head(n) 分别找出什么?想找 "销量最高的 3 道" 该怎么写?

  2. 多列排序时,ascending=[False, True] 分别控制哪一列的升降?

‹ 返回目录
🏠首页 Python 📦资源 👤关于我