【Pandas】pandas DataFrame reorder_levels

Pandas2.2 DataFrame

Reshaping sorting transposing

方法 描述
DataFrame.droplevel(level[, axis]) 用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法
DataFrame.pivot(*, columns[, index, values]) 用于重塑 DataFrame 的结构的方法
DataFrame.pivot_table([values, index, …]) 用于**创建透视表(pivot table)**的函数
DataFrame.reorder_levels(order[, axis]) 用于重新排序多级索引(MultiIndex)的层级顺序的方法
DataFrame.sort_values(by, *[, axis, …]) 用于按指定列或行的值对 DataFrame 进行排序的方法
DataFrame.sort_index(*[, axis, level, …]) 用于按索引(行或列)对 DataFrame 进行排序的方法
DataFrame.nlargest(n, columns[, keep]) 用于选取 DataFrame 中某列或多列的前 n 个最大值对应的行的方法
DataFrame.nsmallest(n, columns[, keep]) 用于选取 DataFrame 中某列或多列的前 n 个最小值对应的行的方法

pandas.DataFrame.nsmallest()

pandas.DataFrame.nsmallest(n, columns[, keep]) 是一个用于选取 DataFrame 中某列或多列的前 n 个最小值对应的行的方法。它常用于快速筛选出数据集中某些指标最小的记录,是 nlargest() 的对应最小值操作。


方法签名
DataFrame.nsmallest(n, columns, keep='first')

参数说明
参数 类型 说明
n int 要选取的最小记录数(即前 n 条)
columns str 或 list of str 指定按哪些列进行排序和筛选;可以是单列或多列
keep {'first', 'last', 'all'},默认 'first' 当遇到相同值时如何处理:
- 'first':保留第一次出现
- 'last':保留最后一次出现
- 'all':返回所有符合条件的行(可能超过 n 行)

✅ 返回值
  • 返回一个新的 DataFrame,包含按照指定列排序后取前 n 小值的行;
  • 如果设置 keep='all',可能会返回多于 n 行的数据。

示例代码及结果
示例 1:基本用法(按单列选取前 n 小)
import pandas as pd

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Score': [85, 92, 78, 92, 95]
})

print("Original DataFrame:")
print(df)
输出:
     Name  Score
0   Alice     85
1     Bob     92
2 Charlie     78
3   David     92
4     Eve     95
# 取 Score 列中前 2 小的记录
bottom_2 = df.nsmallest(2, 'Score')
print("\nBottom 2 scores:")
print(bottom_2)
输出:
      Name  Score
2  Charlie     78
0    Alice     85

示例 2:使用 keep='all' 获取所有并列最小值
# 添加重复最小值
df.loc[5] = ['Frank', 78]

# 获取所有 Score 最小的记录(即使有多个)
bottom_all = df.nsmallest(2, 'Score', keep='all')
print("\nBottom all (keep='all'):")
print(bottom_all)
输出:
      Name  Score
2  Charlie     78
5    Frank     78

示例 3:按多列选取前 n 小(先按 Score,再按 Age)
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Score': [85, 92, 78, 92, 95],
    'Age': [24, 22, 23, 25, 20]
})

print("Original DataFrame with multiple columns:")
print(df)
输出:
     Name  Score  Age
0   Alice     85   24
1     Bob     92   22
2 Charlie     78   23
3   David     92   25
4     Eve     95   20
# 先按 Score 排序,再按 Age 排序,取前 2 名
bottom_multi = df.nsmallest(2, ['Score', 'Age'])
print("\nBottom 2 by Score and Age:")
print(bottom_multi)
输出:
      Name  Score  Age
2  Charlie     78   23
0    Alice     85   24

示例 4:升序排列 + 自定义 keep 策略
# 按 Score 排序,保留最后一个出现的并列项
bottom_last = df.nsmallest(2, 'Score', keep='last')
print("\nBottom 2 with keep='last':")
print(bottom_last)
输出:
      Name  Score
2  Charlie     78
0    Alice     85

应用场景
场景 说明
排行榜生成 如找出销售额最低的产品、用户等
异常检测 找出数值异常低的记录进行分析
可视化准备 提取最小值用于图表展示
数据采样 快速提取关键样本进行分析
结合分组使用 配合 groupby() 使用可获取每组最小值

⚠️ 注意事项
  • 支持单列或多列排序;
  • 默认只保留第一个出现的并列最小值;
  • 设置 keep='all' 可以返回所有符合条件的行;
  • 不会自动修改原始数据;
  • 性能较好,适合快速筛选数据。

✅ 总结对比
方法 是否推荐使用 说明
nsmallest(n, 'col') ✅ 推荐 快速获取某列最小值记录
nsmallest(n, ['col1', 'col2']) ✅ 推荐 多列排序选取最小值
nsmallest(..., keep='all') ✅ 推荐 获取所有并列最小值
nlargest() ✅ 推荐 对应最大值操作

你可以根据实际需求选择是否使用多列、是否保留所有并列最小值,从而灵活地提取数据集中的关键记录。

你可能感兴趣的:(DataFrame,pandas)