Максимальное значение в определенном индексе списков в словаре

#python #arrays #pandas #dataframe #dictionary

#python #массивы #pandas #фрейм данных #словарь

Вопрос:

У меня есть словарь, который выглядит следующим образом, причем значения представляют собой списки с одинаковым количеством индексов. Это для создания фрейма данных panda. Я хочу получить имя ключа с максимальным значением каждого индекса в этих списках. (т.Е. 0.00023478 для первого индекса этих списков и 0.23849287 для четвертого). Я попытался преобразовать его в фрейм данных panda, а затем найти максимальный индекс, но это занимает слишком много времени, поскольку я обрабатываю слишком много данных. Мне нужно было бы найти максимальное значение определенного индекса, а затем вернуть ключ перед преобразованием словаря в фрейм данных.

 {'DT': [0, 0, 0, 0, 0, 0, 0, 0], 'NN': [0.00023478, 0, 0, 0, 0, 0, 0, 0], 
'POS': [0, 0, 0, 0.000192837, 0, 0, 0, 0], 'MD': [0, 0, 0, 0, 0, 0, 0, 0], 
'VB': [0, 0, 0, 0, 0, 0, 0, 0], 'VBN': [0, 0, 0, 0, 0, 0, 0, 0], 
'IN': [0.0000028945, 0, 0, 0, 0, 0, 0, 0], 'JJ': [0, 0, 0, 0, 0, 0, 0, 0], 
'NNS': [0, 0, 0, 0, 0, 0, 0, 0], 'CC': [0, 0, 0, 0.23849287, 0, 0, 0, 0], 
'RBS': [0, 0, 0, 0, 0, 0, 0, 0], 'NNP': [0, 0, 0, 0, 0, 0, 0, 0], 
'VBZ': [0, 0, 0, 0, 0, 0, 0, 0], 'TO': [0, 0, 0, 0, 0, 0, 0, 0]}
 
 for i in range(len(test)):  # how many sentence
    list1 = [[0 for x in range(len(test[i]))] for y in range(len(pos_list))]
    q = dict(zip(pos_list, list1))
    for j in range(len(test[i])):
 

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

1. Вы пробовали: pd.DataFrame(data=data).idxmax(1) ?

Ответ №1:

Использование max with dict.get в качестве ключа:

 max(data, key=data.get)
 

Или с DataFrame.idxmax :

 df.idxmax(1)
 

Ответ №2:

Преобразуйте свой диктант в DataFrame :

 df = pd.DataFrame(d)
print(df)

# Output:
   DT        NN       POS  MD  VB  VBN        IN  JJ  NNS        CC  RBS  NNP  VBZ  TO
0   0  0.000235  0.000000   0   0    0  0.000003   0    0  0.000000    0    0    0   0
1   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
2   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
3   0  0.000000  0.000193   0   0    0  0.000000   0    0  0.238493    0    0    0   0
4   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
5   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
6   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
7   0  0.000000  0.000000   0   0    0  0.000000   0    0  0.000000    0    0    0   0
 

Затем используйте max на оси столбцов:

 >>> df.max(axis='columns')
0    0.000235
1    0.000000
2    0.000000
3    0.238493
4    0.000000
5    0.000000
6    0.000000
7    0.000000
dtype: float64
 

Это то же самое, что знать ключ индекса с idxmax :

 >>> df.idxmax(axis='columns')
0    NN
1    DT
2    DT
3    CC
4    DT
5    DT
6    DT
7    DT
dtype: object