首页 > 解决方案 > 通过合并包含可变大小列表的列在 df 中创建字典列

问题描述

我有以下数据框:

df = pd.DataFrame({'A': [['A1', 'A2', 'A3'], ['A1', 'A2']], 
                   'B': [['B1', 'B2', 'B3'], ['B1', 'B2']],
                   'C': [['C1', 'C2', 'C3'], ['C1', 'C2']]
                  })
             A            B            C
     0  [A1, A2, A3] [B1, B2, B3] [C1, C2, C3]
     1  [A1, A2]     [B1, B2]     [C1, C2]

如您所见,“A”、“B”和“C”列包含长度可能不同(但每行长度相同)的列表。

我想做的是添加一个包含嵌套字典的新列,该字典是同一行上列表的组合。例如,这将是应放入第 0 行的新列(我们称之为“instance_details”)中的结果字典:

{
    'instance_1': {
        'A': 'A1', 
        'B': 'B1', 
        'C': 'C1'
    },
    'instance_2': {
        'A': 'A2', 
        'B': 'B2', 
        'C': 'C2'
    },
    'instance_3': {
        'A': 'A3', 
        'B': 'B3', 
        'C': 'C3'
    }
}

我尝试通过使用 zip() 合并列表来使用中间步骤,但我无法得到我想要的结果。除此之外,我需要遍历列表以创建最终字典,而且我不知道解决这个问题的正确方法应该是什么。

感谢您的帮助!

标签: pythonpandas

解决方案


我会做unnesting

s=unnesting(df,list(df),axis=1).groupby(level=0).apply(lambda x : dict(zip(range(len(x)),x.to_dict('r'))))
0    {0: {'A': 'A1', 'B': 'B1', 'C': 'C1'}, 1: {'A'...
1    {0: {'A': 'A1', 'B': 'B1', 'C': 'C1'}, 1: {'A'...
dtype: object

#s.iloc[0]
#{0: {'A': 'A1', 'B': 'B1', 'C': 'C1'}, 1: {'A': 'A2', 'B': 'B2', 'C': 'C2'}, 2: {'A': 'A3', 'B': 'B3', 'C': 'C3'}}
df['row_dict']=s

推荐阅读