📖 知识点
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 条(销量最低)多列排序用列表控制,可同时按多个指标排
⚠️ 易错提醒
sort_values默认返回新表,不改原表
ascending=False是降序(从大到小),默认升序多列排序时
ascending也要写成列表,一一对应
⚔️ Kata 实战任务
任务需求:
导入 pandas,创建一份数据(菜名、销量、价格)
用
sort_values("销量", ascending=False)按销量降序用降序 + head 找销量最高的前 2 道菜
用升序 + head 找销量最低的前 2 道菜
用多列排序(销量降序 + 价格升序)
打印结果
参考代码
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
🧠 思考题
降序 +
head(n)和 升序 +head(n)分别找出什么?想找 "销量最高的 3 道" 该怎么写?多列排序时,
ascending=[False, True]分别控制哪一列的升降?
行者孙Python