python - 通过合并包含可变大小列表的列在 df 中创建字典列

标签 python pandas

我有以下数据框:

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() 合并,但无法得到我想要的结果。除此之外,我需要迭代列表来创建最终的字典,而且我不知道解决这个问题的正确方法应该是什么。

感谢您的帮助!

最佳答案

我会做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

关于python - 通过合并包含可变大小列表的列在 df 中创建字典列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59952980/

相关文章:

python - 匹配两个包含字符串的列表

python - 如何按两行排序并打印具有最高值的行

python - 显示价格

python - 如何在特定条件下从 Pandas 数据框中选择行

Python 列表到 Pandas 数据框的字典

python - 如果子索引的列值满足条件,则从 MultiIndex 数据框中删除索引

python - 如何访问 Django 模板中的给定列表元素?

python - 使用字典或列表 python

python - 如何将数据重新组织到 pandas 中的新数据框中,以这种方式显示数据的更改?

python - 按数据帧计算分类数据 Pandas 组