У меня есть dataframe pandas, и я хотел бы вернуть имена столбцов с тремя самыми высокими значениями. Например:Получить имена столбцов Pandas из номеров столбцов
import numpy as np
import pandas as pd
a = np.array([[2., 1., 0., 5., 4.], [6., 10., 7., 1., 3.]])
df = pd.DataFrame(a, columns=['A', 'B', 'C', 'D', 'E'])
Дает:
A B C D E
0 2 1 0 5 4
1 6 10 7 1 3
Для каждой строки, я хочу, чтобы добавить три новые столбцы с именами столбцов с самыми высокими тремя значениями:
A B C D E First Second Third
0 2 1 0 5 4 D E A
1 6 10 7 1 3 B C A
Я дошли до использования argpartition
, чтобы получить индексы для трех верхних столбцов в каждой строке:
inx = df.apply(np.argpartition, args=(-3,), axis=1).ix[:, -3:].values
Что тогда нужно, чтобы получить отсортированный
sorted_inx = inx.sort()
Это не ясно, как я бы тогда взять эти индексы столбцов, получить имена, а затем заполнить их обратно в df
как три новых столбцов
Это определенно лучше +1 – EdChum
Можете ли вы объяснить немного, что эта часть является достижение: '[:, :: - 1]'? Я могу догадаться, что он захватывает все строки, но '-1' в этом случае не ясен. – slaw
Все это делает создание представления данных, которое находится в обратном порядке каждой строки, поскольку сортировка argsort возрастает. Первая часть '[:,' говорит, что она работает по всем строкам, а вторая часть ':: - 1]' говорит numpy принимать все элементы в строке и отменять их порядок. – n8yoder