使用具有重复值和字典值作为列表的列将数据帧转换为字典

时间:2019-12-26 13:22:37

标签: python pandas dataframe pandas-groupby

我想获得这样的结果。

对于此数据框:

Name    Val
   A      1
   A      2
   B      1
   B      3
   B      4

我想要像{'A':[1,2],'B';[1,3,4]}

这样的字典

我将有两个这样的数据框,我的目标是实现每个键的值差异。像键“ B”一样,其他数据帧的值可以为1,5。

我不想使用循环,因为数据框会很大。

我尝试使用

df.set_index(key).to_dict()[value-colum],但是每个键只给我一个值。

我尝试将分组依据用于datafram

2 个答案:

答案 0 :(得分:0)

这将满足您的需求:

In [22]: out = {}                                                               

In [23]: for i in df["Name"].tolist(): 
    ...:     out[i] = df[df["Name"]==i]["Val"].tolist() 
    ...:                                                                        

In [24]: out                                                                    
Out[24]: {'A': [1, 2], 'B': [1, 3, 4]}

答案 1 :(得分:0)

您可以尝试:

ddict = {
  'A':[],
  'B':[]
}

按列过滤数据,并从另一列返回值。将每个字典键设置为这些结果:

ddict['A'] = list(df[df['Name'] == 'A']['Val'].values)
ddict['B'] = list(df[df['Name'] == 'B']['Val'].values)

输出:

{
'A': ['1', '2'],
'B': ['1', '3', '4']
}

编辑:或者,如果要遍历所有键,则:

 for key in ddict.keys():
    ddict[key] = list(df[df['Name'] == key]['Val'].values)
相关问题