Ссылки:
Применить функцию к строке в pandas - Пример 3
Вернуть первые n пар ключевых значений из dict
Чтобы вернуть первые n пар ключевых значений из dict
from itertools import islice
def take(n, iterable):
return list(islice(iterable, n))
отбросьте столбец индекса
df.drop('Index', axis=1,inplace=True)
Функция, которую можно применить ко всем строкам для поиска 3 самые верхние категории
Функция topN
принимает в качестве входного параметра row
: строку фрейма данных и n
: обозначает, сколько самых верхних элементов вы хотите извлечь.
def topN(row, n):
x = row.to_dict() # convert the input row to a dictionary
x = {k: v for k, v in sorted(x.items(), key=lambda item: -item[1])} # sort the dictionary based on their values
n_items = take(n, x.items()) # extract the first n values from the dictionary
return n_items
n = 3 #number of elements needed
df['X'] = df.apply(lambda row : topN(row,n), axis = 1)
Вывод:
Новый столбец X
с требуемым результатом в виде словарей. Вы также можете преобразовать столбец в массив.
Class 1 Class 2 Class 3 Class 4 Class 5 X
0 0.956935 0.252199 0.000000 0.335895 0.611442 [(Class 1, 0.95693475), (Class 5 , 0.61144155...
1 0.473616 0.000000 0.510585 0.500731 0.975620 [(Class 5 , 0.975620011), (Class 3, 0.5105852...
2 0.224683 0.122315 0.640730 0.000000 0.872211 [(Class 5 , 0.87221139), (Class 3, 0.6407305)...
Пример удаления всех значений с помощью 0.0
:
d = {1:0.0, 2:0.0, 3:1.0}
x={k:v for k,v in d.items() if v}
x # prints {3: 1.0}