You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:30:04