我有以下数据框:
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/