Python 将dataframe转换为包含字典列表的字典

Python 将dataframe转换为包含字典列表的字典,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我的数据框如图所示 name key value john A223 390309 jason B439 230943 peter A5388 572039 john D23902 238939 jason F2390 23930 我想将上面生成的数据帧转换成一个嵌套字典,字典列表如下所示格式 {'john': [{'key':'A223', 'value':'390309'}, {'key':'A5388', 'value':'5

我的数据框如图所示

 name    key    value
 john    A223   390309
 jason   B439   230943
 peter   A5388  572039
 john    D23902 238939
 jason   F2390   23930
我想将上面生成的数据帧转换成一个嵌套字典,字典列表如下所示格式

{'john': [{'key':'A223', 'value':'390309'}, {'key':'A5388', 'value':'572039'}],
 'jason': [{'key':'B439','value':'230943', {'key':'F2390', 'value'2:'23930'}],
 'peter': [{'key':'A5388'  ,'value':'572039'}]}
有人能帮忙吗。

试试这个

final_dict={}
def dict_make(row):
    m_k= row['name'].values.tolist()[0]
    final_dict[m_k]=  row.set_index('name').to_dict(orient='records')
df.groupby('name').apply(dict_make)
print final_dict
输出:

{'peter': [{'value': 572039, 'key': 'A5388'}], 
'john': [{'value': 390309, 'key': 'A223'}, {'value': 238939, 'key': 'D23902'}],
'jason': [{'value': 230943, 'key': 'B439'}, {'value': 23930, 'key': 'F2390'}]}
用于:

您可以按如下方式使用和系列:

def f(rows):
      return {rows.iloc[0]['name']: [{'key': row['key'], 'value': row['value']} for _, row in rows.iterrows()]}

df.groupby("name").apply(f).tolist()
生成所需的结果:

[{'jason': [{'key': 'B439', 'value': '230943'}, {'key': 'F2390', 'value': '23930'}]},
 {'john': [{'key': 'A223', 'value': '390309'}, {'key': 'D23902', 'value': '238939'}]},
 {'peter': [{'key': 'A5388', 'value': '572039'}]}]
说明:

  • 使用
    groupby(“name”)
    我们根据
    name
  • 然后我们将函数
    f
    应用于
    apply(f)
  • f
    使用
    iterrows
    遍历这些行,创建一个字典列表,其中
    [{'key':row['key'],'value':row['value']}用于uu,row in rows.iterrows()]
    最后,我们只使用
    rows.iloc[0]['name']
    为该
    名称创建最后一个字典
    
  • 我们使用
    tolist()
[{'jason': [{'key': 'B439', 'value': '230943'}, {'key': 'F2390', 'value': '23930'}]},
 {'john': [{'key': 'A223', 'value': '390309'}, {'key': 'D23902', 'value': '238939'}]},
 {'peter': [{'key': 'A5388', 'value': '572039'}]}]