【问题标题】:obtaining indices of n max absolute values in dataframe row获取数据帧行中 n 个最大绝对值的索引
【发布时间】:2019-02-26 18:54:33
【问题描述】:

假设我创建了一个如下所示的 Pandas 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 的解决方案,但似乎这些解决方案并不容易处理多个值

【问题讨论】:

  • 请在生成数据帧之前为您的 RNG 播种。您能否更新您的图片和解释,说明 RNG 是否被播种为零?
  • argpartition 绝对值应该做你想做的事。

标签: python pandas numpy dataframe


【解决方案1】:

你可以使用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]])

【讨论】:

【解决方案2】:

试试这个(这不是最佳代码):

idx_nmax = {}
n = 3
for index, row in df.iterrows():
    idx_nmax[index] = list(row.nlargest(n).index)

最后你会得到一本字典:

作为键的行的索引

并且作为Values是该行第'n'个最高值的索引

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 2013-07-11
    • 2011-10-18
    • 2015-06-12
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多