簡體   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