pandas.DataFrame.nsmallest() 是一个用于返回 DataFrame 中指定列的最小值行的方法。可以通过设置 n 参数来选择返回最小的 N 行数据。它在处理排序提取最小值行的场景中,比 sort_values() + head() 更高效。当数据非常大时,nsmallest() 比 sort_values().head(n) 更快,因为它底层使用的是部分排序算法(heap-based selection)。本文主要介绍一下Pandas中pandas.DataFrame.nsmallest方法的使用。

DataFrame.nsmallest(self, n, columns, keep='first') → 'DataFrame'  [source]

返回按列升序排列的前n行。

以升序返回前n行中column中的最小值。未指定的列也将返回,但不用于排序。

此方法等效于df.sort_values(columns, ascending=True).head(n) ,但性能更高。

参数

n : int

要检索的项目数。

columns list str

列名或按顺序排列的名称。

keep : {‘first’, ‘last’, ‘all’}, 默认 ‘first’

其中有重复的值:

1) first : 以第一个事件为例。

2) last : 以最后一个事件为例。

3) all : 不要删除任何重复项,

即使这意味着要选择超过n个项目。

0.24.0版中的新功能。

返回值

DataFrame

例子

1)选取 population 列中值最小的三行

import pandas as pd

# 创建 DataFrame
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"])

# 最小的3个population
print(df.nsmallest(3, 'population'))

2)使用 keep='last',相同值保留最后的顺序

import pandas as pd

# 创建 DataFrame
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"])

print(df.nsmallest(3, 'population', keep='last'))

3)使用 keep='all',保留所有最小值重复的行(不限制为3行)

import pandas as pd

# 创建 DataFrame
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"])

print(df.nsmallest(3, 'population', keep='all'))

4)按多个列排序:先按 population,再按 GDP

import pandas as pd

# 创建 DataFrame
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"])

print(df.nsmallest(3, ['population', 'GDP']))

推荐文档

相关文档

大家感兴趣的内容

随机列表