Python 获取数据帧行中n个最大绝对值的索引

Python 获取数据帧行中n个最大绝对值的索引,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,假设我创建一个熊猫数据帧,如下所示 import pandas as pd import numpy as np np.random.seed(0) x = 10*np.random.randn(5,5) df = pd.DataFrame(x) 例如,这可以生成以下内容: 对于每一行,我都在寻找一种方法,以绝对值的形式获得对应于最大n(比如3)值的索引。例如,对于第一行,我希望是[0,3,4]。我们可以假设结果不需要排序 我尝试搜索类似于idxmax和argmax的解决方案,但似乎它们不

假设我创建一个熊猫数据帧,如下所示

import pandas as pd
import numpy as np

np.random.seed(0)
x = 10*np.random.randn(5,5)
df = pd.DataFrame(x)
例如,这可以生成以下内容:

对于每一行,我都在寻找一种方法,以绝对值的形式获得对应于最大n(比如3)值的索引。例如,对于第一行,我希望是[0,3,4]。我们可以假设结果不需要排序


我尝试搜索类似于idxmax和argmax的解决方案,但似乎它们不容易处理多个值

您可以使用
np.argsort(axis=1)

给定数据集:

x = 10*np.random.randn(5,5)
df = pd.DataFrame(x)
           0          1         2          3          4
0  17.640523   4.001572  9.787380  22.408932  18.675580
1  -9.772779   9.500884 -1.513572  -1.032189   4.105985
2   1.440436  14.542735  7.610377   1.216750   4.438632
3   3.336743  14.940791 -2.051583   3.130677  -8.540957
4 -25.529898   6.536186  8.644362  -7.421650  22.697546

df.abs().values.argsort(1)[:, -3:][:, ::-1]
array([[3, 4, 0],
       [0, 1, 4],
       [1, 2, 4],
       [1, 4, 0],
       [0, 4, 2]])
尝试以下操作(这不是最佳代码):

最后,您将拥有一本包含以下内容的词典:

作为行的索引键


作为价值观​​此行“n”最大值的索引

请在生成数据帧之前为RNG设定种子。您能否更新您的图片和解释,说明RNG是否已被设定为零?
argpartition
上的绝对值应满足您的要求。可以帮助回答以下问题
idx_nmax = {}
n = 3
for index, row in df.iterrows():
    idx_nmax[index] = list(row.nlargest(n).index)