【问题标题】:creating a dataframe from nested dictionary of list从列表的嵌套字典创建数据框
【发布时间】:2023-03-23 21:23:01
【问题描述】:

我有一个嵌套的列表字典,如下所示:


dictionary = {'ss':{'feat1':[12,8173,9173,13],
                    'feat2':[73,1938,183,38]},
              'dd':{'feat1':[324,42,56,839],
                    'feat2':[13,398,817,9173]}}

我想将其转换为数据框,使其看起来像:

ss   feat1    12   8173. 9173.  13 
ss   feat2    73.  1938. 183.   38
dd   feat1    324.  42.  56.    839
dd   feat2    13   398.  817.  9173

我怎样才能做到这一点?见解将不胜感激

【问题讨论】:

    标签: python-3.x pandas dictionary


    【解决方案1】:

    通过stack()+explode()+pivot()尝试:

    df=pd.DataFrame(dictionary).stack().explode().reset_index()
    df['key']=df.groupby(['level_0','level_1']).cumcount()
    df=df.pivot(['level_1','level_0'],'key',0).reset_index()
    df.columns=range(len(df.columns))
    

    通过stack()+explode()+unstack():

    df=pd.DataFrame(dictionary).stack().explode()
    df=(df.to_frame().set_index(df.groupby(level=[1,0]).cumcount(),append=True)
          .unstack().reset_index())
    df.columns=range(len(df.columns))
    

    df的输出:

        0      1    2     3     4     5
    0  dd  feat1  324    42    56   839
    1  dd  feat2   13   398   817  9173
    2  ss  feat1   12  8173  9173    13
    3  ss  feat2   73  1938   183    38
    

    【讨论】:

    • 嘿投反对票!!请告诉您拒绝投票的原因,谢谢:)
    【解决方案2】:

    试试:

    dictionary = {
        "ss": {"feat1": [12, 8173, 9173, 13], "feat2": [73, 1938, 183, 38]},
        "dd": {"feat1": [324, 42, 56, 839], "feat2": [13, 398, 817, 9173]},
    }
    
    df = pd.DataFrame.from_dict(dictionary)
    
    dfe = df.explode(["ss", "dd"])
    df_out = (
        dfe.set_index(dfe.groupby(level=0).cumcount() + 1, append=True)
        .unstack(0)
        .T.reset_index()
    )
    
    df_out
    

    输出:

      level_0 level_1    1     2     3     4
    0      ss   feat1   12  8173  9173    13
    1      ss   feat2   73  1938   183    38
    2      dd   feat1  324    42    56   839
    3      dd   feat2   13   398   817  9173
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-27
      • 2020-05-10
      • 1970-01-01
      • 2021-11-16
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多