pandas DataFrame两列字典合并生成新列的实现问题
问题根因
list.append()是原地修改方法,返回值为None,你直接将该返回值赋值给df['D3'],导致整列结果都是None- 你将存储合并结果的
defaultdict定义在遍历行的循环外部,所有行的字典值会被写入同一个全局容器,没有按行隔离,逻辑完全不符合需求 - 你在内层遍历key的环节直接对整列
df['D3']赋值,会反复覆盖全列数据,没有给每行单独分配合并结果
最优实现方案
推荐使用pandas的行遍历apply方法,代码简洁且性能足以应对43000行的业务数据,同key合并逻辑直接用字典推导式实现即可,兼容不同行字典长度不一致的场景:
import pandas as pd # 定义单行字典合并逻辑 def merge_dict_per_row(row): d1, d2 = row['D1'], row['D2'] # 因两行字典key完全一致,直接遍历任意一个的key即可 return {key: [d1[key], d2[key]] for key in d1} # 对每行应用合并逻辑,生成D3列 df['D3'] = df.apply(merge_dict_per_row, axis=1)
修正后的循环实现(可选)
如果习惯用循环写法,修正后代码如下:
# 提前初始化D3列 df['D3'] = [dict() for _ in range(len(df))] for row_idx in range(len(df)): d1 = df.loc[row_idx, 'D1'] d2 = df.loc[row_idx, 'D2'] merged = {} for k in d1: merged[k] = [d1[k], d2[k]] df.loc[row_idx, 'D3'] = merged
内容的提问来源于stack exchange,提问作者TSirico
相关产品推荐
相关产品推荐

