如何在熊猫数据框中将ID与它们的特定值关联?

时间:2018-11-09 14:15:19

标签: python python-3.x pandas dictionary

给出以下数据框:

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的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

groupbyagglist一起使用,并将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]