看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas
的 nsmallest()
方法用于从 DataFrame
中返回按指定列的值排序后的前 n
行数据。这个方法通常用于查找数据集中数值最小的若干行,比如要找出某个指标值最低的前几名数据时。
nsmallest()
主要支持 int
、float
类型的列数据。对于字符串类型的列或其他无法进行大小比较的列,不能使用该方法。
DataFrame.nsmallest(
n: int,
columns: str | list[str],
keep: str = 'first'
)
返回按列升序排列的前n行。按升序返回列中值最小的前n行。未指定的列也会返回,但不用于排序。
此方法等效于 df.sort_values(columns, ascending=True).head(n)
,但性能更高。
n:
int
n
行。如果 n
大于数据总行数,将返回所有行。columns:
str
或 list[str]
n
行数据。可以传入单列名称的字符串或列名称列表。keep:
str
keep
参数决定保留哪些行。可选值有:'first'
:保留排序后前 n
个出现的行(默认值)。'last'
:保留排序后最后 n
个出现的行。'all'
:保留所有具有相同排序值的行。DataFrame
DataFrame
,包含排序后的前 n
行数据,并且保持原始 DataFrame
的索引。nsmallest()
通常在需要找到数据集中数值最小的若干行时使用,比如找到最低分的学生、最低价格的商品、或最小体重的动物等。
df = pd.DataFrame({'population': [59000000, 65000000, 434000,
434000, 434000, 337000, 337000,
11300, 11300],
'GDP': [1937894, 2583560 , 12011, 4520, 12128,
17036, 182, 38, 311],
'alpha-2': ["IT", "FR", "MT", "MV", "BN",
"IS", "NR", "TV", "AI"]},
index=["Italy", "France", "Malta",
"Maldives", "Brunei", "Iceland",
"Nauru", "Tuvalu", "Anguilla"])
df
'''
population GDP alpha-2
Italy 59000000 1937894 IT
France 65000000 2583560 FR
Malta 434000 12011 MT
Maldives 434000 4520 MV
Brunei 434000 12128 BN
Iceland 337000 17036 IS
Nauru 337000 182 NR
Tuvalu 11300 38 TV
Anguilla 11300 311 AI
'''
在下面的示例中,我们将使用nsmallest选择“population”列中具有最小值的三行。
df.nsmallest(3, 'population')
'''
population GDP alpha-2
Tuvalu 11300 38 TV
Anguilla 11300 311 AI
Iceland 337000 17036 IS
'''
当使用keep='last'时,关系以相反的顺序解析:
df.nsmallest(3, 'population', keep='last')
'''
population GDP alpha-2
Anguilla 11300 311 AI
Tuvalu 11300 38 TV
Nauru 337000 182 NR
'''
当使用keep='all'时,如果最大元素有重复值,则保留的元素数量可以超过n,所有关系都会保留。
df.nsmallest(3, 'population', keep='all')
'''
population GDP alpha-2
Tuvalu 11300 38 TV
Anguilla 11300 311 AI
Iceland 337000 17036 IS
Nauru 337000 182 NR
'''
但是,nsmallest不保留n个不同的最小元素:
df.nsmallest(4, 'population', keep='all')
'''
population GDP alpha-2
Tuvalu 11300 38 TV
Anguilla 11300 311 AI
Iceland 337000 17036 IS
Nauru 337000 182 NR
'''
为了按“人口”列和“GDP”列中的最小值排序,我们可以指定多个列,如下例所示。
df.nsmallest(3, ['population', 'GDP'])
'''
population GDP alpha-2
Tuvalu 11300 38 TV
Anguilla 11300 311 AI
Nauru 337000 182 NR
'''
下面通过几个例子来说明 nsmallest()
的使用。
假设有一个包含学生成绩的 DataFrame
,我们想要找出成绩最低的 3 个学生。
import pandas as pd
# 构造示例数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Score': [85, 92, 88, 79, 95]
}
df = pd.DataFrame(data)
# 输出构造的数据
print(df)
# 找出成绩最低的 3 个学生
bottom_students = df.nsmallest(3, 'Score')
# 输出结果
print(bottom_students)
输出:
Name Score
0 Alice 85
1 Bob 92
2 Charlie 88
3 David 79
4 Eva 95
Name Score
3 David 79
0 Alice 85
2 Charlie 88
在一些情况下,可能需要按多个列进行排序,比如按销售额和利润共同排序,找出排名最低的前 3 个产品。
import pandas as pd
# 构造示例数据
data = {
'Product': ['A', 'B', 'C', 'D', 'E'],
'Sales': [200, 150, 300, 250, 200],
'Profit': [50, 80, 60, 90, 100]
}
df = pd.DataFrame(data)
# 输出构造的数据
print(df)
# 找出销售额和利润排名最低的前 3 个产品
bottom_products = df.nsmallest(3, ['Sales', 'Profit'])
# 输出结果
print(bottom_products)
输出:
Product Sales Profit
0 A 200 50
1 B 150 80
2 C 300 60
3 D 250 90
4 E 200 100
Product Sales Profit
1 B 150 80
0 A 200 50
4 E 200 100
在这个例子中,首先按照 Sales
进行排序,如果 Sales
相同,则按照 Profit
进行排序。
更新时间:2024-08-21 14:29:07 标签:pandas python 排序 筛选