python - 通过合并包含可变大小列表的列在 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() 合并列表来使用中间步骤,但我无法得到我想要的结果。除此之外,我需要遍历列表以创建最终字典,而且我不知道解决这个问题的正确方法应该是什么。
感谢您的帮助!
解决方案
我会做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
推荐阅读
- r - 在自定义函数中包含额外的(省略号/点点点)参数
- python - 如何将 pandas.core.series.Series 分配给 pandas 数据框列
- python - time.sleep() 在它应该之前采取行动?
- java - 信函打印程序缺少返回
- kubernetes - 如何在 helm 图表中使用 kubernetes volumeMounts: mountPath 和 hostPath?
- java - java的chars()流如何与reduce一起工作?它使用字符编码吗?
- reactjs - 意外的令牌,应为“;” 在反应
- python - 如何在 python 中使用 __del__ 在删除对象被销毁之前将其添加到列表中?
- javascript - 手动调度事件不改变事件目标值
- c# - 某些服务无法在 .net core api 中构建