给出以下数据框:
Col_1 Col_2 Col_3
1 Yes A
1 Yes B
1 No C
2 No C
2 Yes C
2 No D
3 Yes A
3 No B
3 No C
4 Yes C
如何将其转换成这样的字典:
{1:[
Col_2:[Yes,Yes, No],
Col_3:[A,B,C]
],
2:[
Col_2:[No,Yes, No],
Col_3:[C,C,D]
],
3:[
Col_2:[Yes,No, No],
Col_3:[A,B,C]
],
4:[
Col_2:[Yes],
Col_3:[C]
]
}
我试图:
a_lis = set(df3['Col_1'].values.tolist())
temp_lis =[]
for i,e in enumerate(a_lis):
lis = df3[df3['Col_1'] == e]['Col_2'].tolist()
temp_lis.append(lis)
a_dict = dict(list(enumerate(temp_lis)))
但是,我没有得到想要的字典。给定特定键,将所有数据帧映射到Dictionary的最佳方法是什么?
答案 0 :(得分:1)
将groupby
和agg
与list
一起使用,并将to_dict
与参数orient='index'
一起使用进行转换:
d = df.groupby('Col_1').agg(list).to_dict(orient='index')
print(d)
{1: {'Col_2': ['Yes', 'Yes', 'No'], 'Col_3': ['A', 'B', 'C']},
2: {'Col_2': ['No', 'Yes', 'No'], 'Col_3': ['C', 'C', 'D']},
3: {'Col_2': ['Yes', 'No', 'No'], 'Col_3': ['A', 'B', 'C']},
4: {'Col_2': ['Yes'], 'Col_3': ['C']}}
d = {key:[value] for key,value in d.items()}
print(d)
{1: [{'Col_2': ['Yes', 'Yes', 'No'], 'Col_3': ['A', 'B', 'C']}],
2: [{'Col_2': ['No', 'Yes', 'No'], 'Col_3': ['C', 'C', 'D']}],
3: [{'Col_2': ['Yes', 'No', 'No'], 'Col_3': ['A', 'B', 'C']}],
4: [{'Col_2': ['Yes'], 'Col_3': ['C']}]}
print(df.groupby('Col_1').agg(list))
Col_2 Col_3
Col_1
1 [Yes, Yes, No] [A, B, C]
2 [No, Yes, No] [C, C, D]
3 [Yes, No, No] [A, B, C]
4 [Yes] [C]