繁体   English   中英

如何根据列值将python数据框转换为嵌套字典?

[英]How to convert python dataframe to nested dictionary based on column values?

我有 2 个数据框

df1 = pd.DataFrame(data={'ID': ['0','1'], 'col1': [0.73, 0.58], 'col2': [0.51, 0.93], 'Type': ['mean', 'mean'] })
df2 = pd.DataFrame(data={'ID': ['0','1'], 'col1': [0.44, 0.49], 'col2': [0.50, 0.24], 'Type': ['std', 'std'] })
print(df1)
print(df2)

在此处输入图像描述

我需要转换为嵌套字典,如

mydict = {0: {'col1': {'mean': 0.73, 'std': 0.44}, 'col2': {'mean': 0.51, 'std': 0.5}},
 1: {'col1': {'mean': 0.58, 'std': 0.49}, 'col2': {'mean': 0.93, 'std': 0.24}}}

在此处输入图像描述

其中“ID”作为键,列名作为嵌套键,“类型”作为嵌套键,列值作为值

(df1.drop(columns = 'Type').melt('ID', value_name='mean')
    .merge(df2.drop(columns='Type').melt('ID', value_name='std'))
    .assign(c = lambda x:x[['mean', 'std']].to_dict('records'))
    .pivot('variable','ID', 'c').to_dict())

{'0': {'col1': {'mean': 0.73, 'std': 0.44},
  'col2': {'mean': 0.51, 'std': 0.5}},
 '1': {'col1': {'mean': 0.58, 'std': 0.49},
  'col2': {'mean': 0.93, 'std': 0.24}}}

concatDataFrame.pivot用于MultiIndex DataFrame ,然后转换为嵌套字典:

df = pd.concat([df1, df2]).pivot('Type', 'ID')

d = {level: df.xs(level, axis=1, level=1).to_dict() for level in df.columns.levels[1]}
print (d)
{'0': {'col1': {'mean': 0.73, 'std': 0.44}, 
       'col2': {'mean': 0.51, 'std': 0.5}}, 
 '1': {'col1': {'mean': 0.58, 'std': 0.49}, 
       'col2': {'mean': 0.93, 'std': 0.24}}}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM