簡體   English   中英

如何從 pandas DataFrame 創建嵌套字典

[英]How to create a nested dictionary from pandas DataFrame

我對 python 數據系列不是很實用,有人可以解釋我做錯了什么嗎?

我有這個 DataFrame:

Model 品牌 數字
索蘭托 2008年 起亞 19UYA427X1A382858
克爾維特 1968年 雪佛蘭 1C3CDFEB2FD382486
赭色 1933年 豐田 YV440MBK0F1112644
克爾維特 1968年 起亞 45UYA427X1A382858

我需要這個 output:

{
   "Kia": {
        "2008": [
            [
                "Sorento",
                "19UYA427X1A382858"
            ],
            [ 
                "Sorento",
                "45UYA427X1A382858"
            ]
        ]
    }, 
    "Chevrolet": {
      "1968": [ 
         [
          "Corvette",
          "1C3CDFEB2FD382486"
         ] 
       ]
    }
}

所以我需要將具有相同值的項目分組到子列表中,但我不知道該怎么做。 Model 和 Year 分組正確,但我不知道如何用 Brand 和 Number 值填充最后一個列表

 ## this is my partial solution
d = {k: f.groupby('Year').apply(list).to_dict()
     for k, f in df_clean.groupby('Brand')}

pprint.pprint(d)

Output:
 'Mitsubishi': {1994.0: ['Model', 'Year', 'Brand', 'Number'],
                2005.0: ['Model', 'Year', 'Brand', 'Number'],
                'NO_DATA': ['Model', 'Year', 'Brand', 'Number']},
 'Nissan': {1993.0: ['Model', 'Year', 'Brand', 'Number'],
            1996.0: ['Model', 'Year', 'Brand', 'Number'],
            2009.0: ['Model', 'Year', 'Brand', 'Number'],
            2011.0: ['Model', 'Year', 'Brand', 'Number'],
            2012.0: ['Model', 'Year', 'Brand', 'Number']},
 'Oldsmobile': {1999.0: ['Model', 'Year', 'Brand', 'Number']},

您可以使用嵌套的groupby.apply 一次是品牌,一次是多年:

out = (df.groupby('Brand')
       .apply(lambda x: x.groupby('Year')[['Model','Number']]
              .apply(lambda y: y.to_numpy().tolist())
              .to_dict())
       .to_dict())

Output:

{'Chevrolet': {1968: [['Corvette', '1C3CDFEB2FD382486']]},
 'Kia': {1968: [['Corvette', '45UYA427X1A382858']],
  2008: [['Sorento', '19UYA427X1A382858']]},
 'Toyota': {1933: [['Sienna', 'YV440MBK0F1112644']]}}

暫無
暫無

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

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