#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