#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:])