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