Pandas DataFrame 中具有索引和列名的最大 (n) 个数字

Largest (n) numbers with Index and Column name in Pandas DataFrame

我想找出 DataFrame 中最大的 5 个数字,并存储这 5 个值的索引名称和列名称。

我正在尝试使用 nlargest() 和 idxmax 方法,但未能达到我想要的效果。我的代码如下:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
df = DataFrame({'a': [1, 10, 8, 11, -1],'b': [1.0, 2.0, 6, 3.0, 4.0],'c': [1.0, 2.0, 6, 3.0, 4.0]})

你能告诉我我怎样才能做到这一点。谢谢

使用stack and nlargest:

max_vals = df.stack().nlargest(5)

这将为您提供一个具有多索引的系列,其中第一级是原始 DataFrame 的索引,第二级是给定值的列名。这是 max_vals 的样子:

3  a    11.0
1  a    10.0
2  a     8.0
   b     6.0
   c     6.0

要显式获取索引和列名,请在 max_vals 的索引上使用 get_level_values:

max_idx = max_vals.index.get_level_values(0)
max_cols = max_vals.index.get_level_values(1)

max_idx的结果:

Int64Index([3, 1, 2, 2, 2], dtype='int64')

max_cols的结果:

Index(['a', 'a', 'a', 'b', 'c'], dtype='object')