簡體   English   中英

將 Dataframe 轉換為 Python 中的嵌套字典

[英]Convert Dataframe to Nested Dictionary in Python

我正在尋找一種將 dataframe 轉換為字典的方法,這與此處的要求非常相似:

將 pandas DataFrame 轉換為嵌套字典

假設一個樣本數據框

name    v1  v2  v3
0        A  A1  A11 1
1        A  A2  A12 2
2        B  B1  B12 3
3        C  C1  C11 4
4        A  A2  A21 6
5        A  A2  A21 8

列數可能不同,列名也可能不同。

我正在尋找生成:

{
    'A' : { 
        'A1' : { 'A11' : 1 },
        'A2' : { 'A12' : 2 , 'A21' : 6 , 'A21' : 8 },
        'B1' : {}, 
        'C1' : {}
    }, 

    'B' : { 
        'A1' : {},
        'A2' : {},
        'B1' : { 'B12' : 3}, 
        'C1' : {}
    },

    'C' : { 
        'A1' : {},
        'A2' : {},
        'B1' : {} ,
        'C1' : { 'C11' : 4}
    }

}

其他地方建議的方法是通過遞歸:

def recur_dictify(frame):
    if len(frame.columns) == 1:
        if frame.values.size == 1: return frame.values[0][0]
        return frame.values.squeeze()
    grouped = frame.groupby(frame.columns[0])
    d = {k: recur_dictify(g.ix[:,1:]) for k,g in grouped}
    return d

這使:

>>> pprint.pprint(recur_dictify(df))
{'A': {'A1': {'A11': 1}, 'A2': {'A12': 2, 'A21': [6,8]}},
 'B': {'B1': {'B12': 3}},
 'C': {'C1': {'C11': 4}}}

但不會復制 v2 級別的空 dict 嵌套,並將 A2 -A21 的重復分組到數組 [6,8] 中。 我看過Convert a Pandas DataFrame to a dictionary ,到目前為止還沒有運氣。

我假設:

  • 索引沒有名字
  • 列名具有值 A、B、C、D
  • 等等

並且 df 包含上面 recur_dictify 的 output :

ky = frame.v1.unique() # I assume it's ['A1','B1','C1']

for k in df:
    for l in ky:
        if l not in df[k]:
            df[k][l] = {}

你原來的 dataframe 很奇怪。 B2 條目不會出現在結果中的任何位置。

暫無
暫無

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

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