У меня есть следующие данные.Мне нужно сформировать словарь из этого.Есть 20 столбцов с y1_bin, y2_bin, ..... y20_bin.В этих игрушечных данных я показал только три столбца.
Firm y1 y2 y3 prob_y1 prob_y2 prob_y3 y1_bin y2_bin y3_bin
0 A 1 2 7 0.006897 0.000421 0.002729 binA binA binB
1 B 2 3 45 0.013793 0.000632 0.017544 binA binA binE
2 C 3 4 40 0.020690 0.000842 0.015595 binA binA binE
3 D 4 7 3 0.027586 0.001474 0.001170 binA binB binA
4 E 5 9 4 0.034483 0.001895 0.001559 binB binB binA
5 F 6 400 12 0.041379 0.084211 0.004678 binB binH binC
6 G 7 50 32 0.048276 0.010526 0.012476 binB binF binE
7 H 8 70 0 0.055172 0.014737 0.000000 binB binF binA
8 I 9 95 76 0.062069 0.020000 0.029630 binB binF binF
9 J 10 98 1 0.068966 0.020632 0.000390 binC binF binA
10 K 20 2 45 0.137931 0.000421 0.017544 binD binA binE
11 L 30 10 2000 0.206897 0.002105 0.779727 binE binC binH
12 M 40 4000 300 0.275862 0.842105 0.116959 binE binH binH
Я написал следующий синтаксис для добавления ключей и значений:
from collections import defaultdict
mydict = defaultdict(list)
for k, v, m,j in zip(df33.Firm.values, df33.y2_bin.values, df33.y1_bin.values, df33.y3_bin.values):
mydict[k].append(v)
mydict[k].append(m)
mydict[k].append(j)
print(mydict)
Это ожидаемый результат (который я могу получить сверху для цикла - и я знаю, что это не таксамый эффективный способ написания кода.).Есть ли лучший способ сделать это эффективным, чтобы мне не приходилось добавлять df33.***.values
и mydict[k].append(****)
в цикл for.
defaultdict(<type 'list'>, {'A': ['binA', 'binA', 'binB'], 'C': ['binA', 'binA', 'binE'], 'B': ['binA', 'binA', 'binE'], 'E': ['binB', 'binB', 'binA'], 'D': ['binB', 'binA', 'binA'], 'G': ['binF', 'binB', 'binE'], 'F': ['binH', 'binB', 'binC'], 'I': ['binF', 'binB', 'binF'], 'H': ['binF', 'binB', 'binA'], 'K': ['binA', 'binD', 'binE'], 'J': ['binF', 'binC', 'binA'], 'M': ['binH', 'binE', 'binH'], 'L': ['binC', 'binE', 'binH']})