方法 | 描述 |
---|---|
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
行的数据。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
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
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
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() |
✅ 推荐 | 对应最大值操作 |
你可以根据实际需求选择是否使用多列、是否保留所有并列最小值,从而灵活地提取数据集中的关键记录。