簡體   English   中英

將熊貓數據框轉換為具有特定鍵的嵌套字典

[英]Converting a pandas dataframe to a nested dictionary with specific key

我正在嘗試從具有以下格式的熊貓數據框創建嵌套字典:

Name Info  Location  Alias

AA   InfoA locationA AliasA
BB   InfoB locationB AliasB
CC   InfoC locationC AliasC

我正在尋找的結果字典具有以下格式:

my_nested_dict = {"AA": {"Info" : "InfoA", "Location": {"Where": "locationA", "Alias": "AliasA"},
                  "BB": {"Info" : "InfoB", "Location": {"Where": "locationB", "Alias": "AliasB"},
                  "CC": {"Info" : "InfoC", "Location": {"Where": "locationC", "Alias": "AliasC"}
}

我嘗試使用 groupby 並使用 set_index 應用 lambda,但似乎我做錯了:

df.groupby('Name')[['Location', 'Alias']].apply(lambda x: x.set_index('Location').to_dict(orient='index')).to_dict()

但是有了這個,我無法添加“Where”鍵。 輸出如下所示:

my_nested_dict = {"AA": {"Info" : "InfoA", "Location": {"locationA": {"Alias": "AliasA"}},
                  "BB": {"Info" : "InfoB", "Location": {"locationB": {"Alias": "AliasB"}},
                  "CC": {"Info" : "InfoC", "Location": {"locationC": {"Alias": "AliasC"}}
}

此外,我嘗試首先轉換我感興趣的列,這很有效,但我很難用結果替換“位置”列:

df[['Location', 'Alias']].rename(columns={'Location': 'Where'}).to_dict('index')

有沒有一種干凈的熊貓方式來達到預期的效果?

我的嘗試:

d = df.set_index("Name").to_dict("index")
for k,v in d.items():
    d[k]["Location"] = {"Where": v["Location"], "Alias": v["Alias"]}
    d[k].pop("Alias", None)

{'AA': {'Info': 'InfoA', 'Location': {'Where': 'locationA', 'Alias': 'AliasA'}},
 'BB': {'Info': 'InfoB', 'Location': {'Where': 'locationB', 'Alias': 'AliasB'}},
 'CC': {'Info': 'InfoC', 'Location': {'Where': 'locationC', 'Alias': 'AliasC'}}}

我想知道是否有一個干凈的熊貓解決方案,因為我想出的那個似乎太笨拙了

你可以這樣做:

my_dict = (df.rename(columns={'Location' : 'where'})
             .assign(Location = lambda df: df.apply(lambda df: {'where' : df['where'],
                                                                'Alias' : df['Alias']}, 
                                                    axis=1))
             .set_index('Name')[['Info', 'Location']]
             .to_dict('index')
          )
print(my_dict)

輸出

{'AA': {'Info': 'InfoA', 'Location': {'where': 'locationA', 'Alias': 'AliasA'}}, 
 'BB': {'Info': 'InfoB', 'Location': {'where': 'locationB', 'Alias': 'AliasB'}}, 
 'CC': {'Info': 'InfoC', 'Location': {'where': 'locationC', 'Alias': 'AliasC'}}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM