假设我按如下方式创建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的解决方案,但似乎这些解决方案不易处理多个值
答案 0 :(得分: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]])
答案 1 :(得分:0)
尝试一下(这不是最佳代码):
idx_nmax = {}
n = 3
for index, row in df.iterrows():
idx_nmax[index] = list(row.nlargest(n).index)
最后,您将拥有一本字典,其中包含:
将键作为行索引
并将此行的'n'个最高值的索引作为值