我有以下数据。我需要据此组成一本字典。有y1_bin,y2_bin,..... y20_bin的20列。在此玩具数据中,我仅显示了三列。
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)
这是预期的结果(我可以从上面获取循环信息,我知道这不是编写代码的最有效方法。)。有没有更好的方法可以提高效率,因此不必在for循环中继续添加
df33.***.values
和mydict[k].append(****)
。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']})
最佳答案
如何将DataFrame.to_dict
方法与列表理解一起使用,如下所示:
import pandas as pd
df = pd.DataFrame([
{'Firm': 'A', 'y1_bin': 'binA', 'y2_bin': 'binA', 'y3_bin': 'binB'},
{'Firm': 'A', 'y1_bin': 'binA', 'y2_bin': 'binA', 'y3_bin': 'binB'},
{'Firm': 'B', 'y1_bin': 'binA', 'y2_bin': 'binA', 'y3_bin': 'binB'},
{'Firm': 'B', 'y1_bin': 'binA', 'y2_bin': 'binA', 'y3_bin': 'binB'},
])
# set column 'Firm' as the index (needed for df.to_dict() to work)
df.set_index('Firm', inplace=True)
my_dict = {k: list(v.values()) for k, v in df.to_dict('index').items()}
# output:
{'A': ['binA', 'binA', 'binB'], 'B': ['binA', 'binA', 'binB']}
查看to_dict以获得有关其输出的更多信息
关于python - 从列中向 Pandas 追加键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53013084/