第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從 Pandas DataFrame 創(chuàng)建嵌套 JSON,并將分組行作為最深嵌套內(nèi)的屬性

從 Pandas DataFrame 創(chuàng)建嵌套 JSON,并將分組行作為最深嵌套內(nèi)的屬性

嗶嗶one 2023-07-27 10:08:37
我正在尋找一種解決方案來(lái)構(gòu)建嵌套的 dict / JSON,其中最后三列"name"、"color"、"amount"作為“product”列表中的屬性。cat1-cat3列中的值應(yīng)該是鍵。提供的 DataFrame 如下所示:import pandas as pddf = pd.DataFrame({    'cat1': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],    'cat2': ['BB', 'BB', 'BC', 'BB', 'BB', 'BB', 'BC', 'BC'],    'cat3': ['CC', 'CC', 'CD', 'CD', 'CD', 'CC', 'CD', 'CE'],    'name': ['P1', 'P2', 'P3', 'P1', 'P4', 'P1', 'P3','P6'],    'color': ['red', 'blue', 'green', 'green', 'yellow', 'red', 'blue', 'blue']    'amount': [132, 51, 12, 421, 55, 11, 123, 312]})這將是所需的輸出:{   "A":{      "BB":{         "CC":{            "products":[               {                  "name":"P1",                  "color":"red",                  "amount":132               },               {                  "name":"P2",                  "color":"blue",                  "amount":51               }            ]         }      },      "BC":{         "CD":{            "products":[               {                  "name":"P3",                  "color":"green",                  "amount":12               }            ]         }      }   },   "B":{      "BB":{         "CD":{            "products":[               {                  "name":"P1",                  "color":"green",                  "amount":421               },               {                  "name":"P4",                  "color":"yellow",                  "amount":55               }            ]         }      }   },   "C":{      "BB":{         "CC":{            "products":[               {                  "name":"P1",                  "color":"red",                  "amount":11               }            ]         }      },      "BC":{         "CD":{            "products":[               {                  "name":"P3",                  "color":"blue",                  "amount":123               }            ]         },@BEN_YO為這個(gè)問(wèn)題提供了一個(gè)遞歸解決方案,沒(méi)有內(nèi)積部分。
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果其他方法可以的話,你可以嘗試下面的方法,雖然有點(diǎn)臟(你可以嘗試優(yōu)化它)


cols = ['name','color','amount']

u = df[df.columns.difference(cols)].join(df[cols].agg(dict,1).rename('d'))

v = (u.groupby(['cat1','cat2','cat3'])['d'].agg(list).reset_index("cat3"))


v = v.groupby(v.index).apply(lambda x: dict(zip(x['cat3'],x['d'])))

v.index = pd.MultiIndex.from_tuples(v.index,names=['cat1','cat2'])

d = v.unstack(0).to_dict()

print(d)

{'A': {'BB': {'CC': [{'amount': 132, 'color': 'red', 'name': 'P1'},

                     {'amount': 51, 'color': 'blue', 'name': 'P2'}]},

       'BC': {'CD': [{'amount': 12, 'color': 'green', 'name': 'P3'}]}},

 'B': {'BB': {'CD': [{'amount': 421, 'color': 'green', 'name': 'P1'},

                     {'amount': 55, 'color': 'yellow', 'name': 'P4'}]},

       'BC': nan},

 'C': {'BB': {'CC': [{'amount': 11, 'color': 'red', 'name': 'P1'}]},

       'BC': {'CD': [{'amount': 123, 'color': 'blue', 'name': 'P3'}],

              'CE': [{'amount': 312, 'color': 'blue', 'name': 'P6'}]}}}


查看完整回答
反對(duì) 回復(fù) 2023-07-27
?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

我們可以groupby基于分組類別cat1遞歸cat2地cat3構(gòu)建字典:


def set_val(d, k, v):

    if len(k) == 1:

        d[k[0]] = v

    else:

        d[k[0]] = set_val(d.get(k[0], {}), k[1:], v)

    return d



dct = {}

for k, g in df.groupby(['cat1', 'cat2', 'cat3']):

    set_val(dct, k, {'products': g[['name', 'color', 'amount']].to_dict('r')})

print(dct)


{'A': {'BB': {'CC': {'products': [{'amount': 132, 'color': 'red', 'name': 'P1'},

                                  {'amount': 51, 'color': 'blue', 'name': 'P2'}]}},

       'BC': {'CD': {'products': [{'amount': 12, 'color': 'green', 'name': 'P3'}]}}},

 'B': {'BB': {'CD': {'products': [{'amount': 421, 'color': 'green', 'name': 'P1'},

                                  {'amount': 55, 'color': 'yellow', 'name': 'P4'}]}}},

 'C': {'BB': {'CC': {'products': [{'amount': 11, 'color': 'red', 'name': 'P1'}]}},

       'BC': {'CD': {'products': [{'amount': 123, 'color': 'blue', 'name': 'P3'}]},

              'CE': {'products': [{'amount': 312, 'color': 'blue', 'name': 'P6'}]}}}}


查看完整回答
反對(duì) 回復(fù) 2023-07-27
?
天涯盡頭無(wú)女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

def gen_nested_dict(dataframe, group, inner_key, inner_dict):

? ? def set_val(d, k2, v):

? ? ? ? if len(k2) == 1:

? ? ? ? ? ? d[k2[0]] = v

? ? ? ? else:

? ? ? ? ? ? d[k2[0]] = set_val(d.get(k2[0], {}), k2[1:], v)

? ? ? ? return d


? ? dct = {}

? ? for k, g in dataframe.groupby(group):

? ? ? ? set_val(dct, k, {inner_key: g[inner_dict].to_dict('records')})


? ? return dct


?mydct = gen_nested_dict(df, ['cat1', 'cat2', 'cat3'], 'products', ['name', 'color', 'amount'])



查看完整回答
反對(duì) 回復(fù) 2023-07-27
  • 3 回答
  • 0 關(guān)注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)