Поиск индексов N максимальных значений по оси в Pandas

#python #pandas #argmax

#python #pandas #argmax

Вопрос:

Я знаю, что существует метод .argmax(), который возвращает индексы максимальных значений по оси.

Но что, если мы хотим получить индексы 10 самых высоких значений по оси?

Как это можно сделать?

Например.:

 data = pd.DataFrame(np.random.random_sample((50, 40)))
  

Комментарии:

1. Каков ваш ожидаемый результат

2. вы должны предоставить образец результата, который вы хотите, потому что вопрос может быть интерпретирован по-разному. Это сумма 10 наибольших чисел в строке? или 10 самых высоких значений в столбце?

Ответ №1:

Вы можете использовать argsort :

 s = pd.Series(np.random.permutation(30))
sorted_indices = s.argsort()
top_10 = sorted_indices[sorted_indices < 10]
print(top_10)
  

Вывод:

 3     9
4     1
6     0
8     7
13    4
14    2
15    3
19    8
20    5
24    6
dtype: int64
  

Ответ №2:

IIUC, скажем, если вы хотите получить индекс 10 самых больших чисел столбца col :

 data[col].nlargest(10).index
  

Ответ №3:

Попробуйте. Это приведет к получению 10 наибольших значений в строке и помещению их в фрейм данных.

 import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.random_sample((50, 40)))
df2 = pd.DataFrame(np.sort(df.values)[:,-10:])