[英]Pandas dataframe to dict of dict
鑒於以下pandas數據框:
ColA ColB ColC
0 a1 t 1
1 a2 t 2
2 a3 d 3
3 a4 d 4
我想要一本字典詞典。
但我設法創建了以下內容:
d = {t : [1, 2], d : [3, 4]}
通過:
d = {k: list(v) for k,v in duplicated.groupby("ColB")["ColC"]}
我怎么能得到字典的字典:
dd = {t : {a1:1, a2:2}, d : {a3:3, a4:4}}
您可以事先使用groupby
+ apply
步驟執行此操作。
dd = df.set_index('ColA').groupby('ColB').apply(
lambda x: x.ColC.to_dict()
).to_dict()
或者,通過詞典理解:
dd = {k : g.ColC.to_dict() for k, g in df.set_index('ColA').groupby('ColB')}
print(dd)
{'d': {'a3': 3, 'a4': 4}, 't': {'a1': 1, 'a2': 2}}
這個答案的要點是表明通過簡單的迭代和標准庫中的工具可以直接實現這一點。
通常我們會在Pandas DataFrame上執行許多轉換,其中每個轉換都會調用新Pandas對象的構造。 有時,這可以是一個直觀的進展,並具有完美的意義。 但是,有時我們忘記了我們可以使用更簡單的工具。 我相信這是其中一次。 我的回答仍然使用Pandas,因為我使用了itertuples
方法。
from collections import defaultdict
d = defaultdict(dict)
for a, b, c in df.itertuples(index=False):
d[b][a] = c
d = dict(d)
d
{'t': {'a1': 1, 'a2': 2}, 'd': {'a3': 3, 'a4': 4}}
輕微的替代品。 由於我們迭代的元組是名為元組,我們可以通過它所代表的列的名稱訪問每個元素。
from collections import defaultdict
d = defaultdict(dict)
for t in df.itertuples():
d[t.ColB][t.ColA] = t.ColC
d = dict(d)
d
{'t': {'a1': 1, 'a2': 2}, 'd': {'a3': 3, 'a4': 4}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.