代码之家  ›  专栏  ›  技术社区  ›  PCMitchell

Pandas数据帧到python字典,相关列名作为dict值存储在列表中

  •  0
  • PCMitchell  · 技术社区  · 4 年前

    我正在尝试从pandas数据帧中获取数据,并将其转换为所需的字典。以下是数据示例:

        data =[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1],[0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2]]
        Utable = pd.DataFrame(data, columns =['Type1', 'Type2', 'Type3', 'Type4', 'Type5', 'Type6', 'Type7', 'Type8', 'ID'])
    

    我需要的字典是作为dict键的ID记录,并且值需要是根据列名确定的不可接受的Type#的列表。如果类型为0.0,则它们是不可接受的。因此,对于本例,输出为:

        {1: [1, 2, 3, 4, 5, 6, 7, 8], 2: [1, 2, 4, 5, 6, 7, 8]}
    

    我可以找到如何使用ID作为dict键将类型值存储为列表的方法:

        U = Utable.set_index('ID').T.to_dict('list')
    

    其给出:

       {1: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 2: [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]} 
    

    但我不知道如何从列表中存储的列名中获取内容作为dict值。

    非常感谢您的帮助。

    1 回复  |  直到 4 年前
        1
  •  0
  •   user7864386 user7864386    4 年前

    您可以使用参数 orient=index 当转换为词典时;然后使用列表理解来获得期望的列表作为值:

    out = {k: [int(i[-1]) for i, v in d.items() if v==0] 
           for k, d in Utable.set_index('ID').to_dict('index').items()}
    

    输出:

    {1: [1, 2, 3, 4, 5, 6, 7, 8], 2: [1, 2, 4, 5, 6, 7, 8]}