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

如何将参考表数据关联到Pandas DataFrame的嵌套字典数组中?

解决方案

方法一:字典映射 + 自定义函数处理数组

逻辑直观,适合中小规模数据集:

  1. 把right_df转换成id到value的映射字典,实现快速查询:
value_map = right_df.set_index('id')['value'].to_dict()
  1. 定义函数遍历数组内的字典,添加对应value字段:
def add_value_to_dicts(arr):
    for d in arr:
        d['value'] = value_map.get(d['id'], None)  # 用get避免id不存在时报错
    return arr
  1. 用apply将函数应用到left_df的目标列:
left_df['array_column'] = left_df['array_column'].apply(add_value_to_dicts)

方法二:展开数组→合并→重新聚合(适合大数据量)

优先用Pandas向量化操作,避免循环开销:

  1. 展开left_df的数组列,生成每行对应单个字典的格式:
exploded_df = left_df.explode('array_column', ignore_index=True)
  1. 提取字典中的id作为单独列,方便合并:
exploded_df['id'] = exploded_df['array_column'].apply(lambda x: x['id'])
  1. 和right_df合并获取value:
merged_df = exploded_df.merge(right_df, on='id', how='left')
  1. 将value合并回字典,再按parent_id重新聚合数组:
merged_df['array_column'] = merged_df.apply(
    lambda x: {**x['array_column'], 'value': x['value']}, axis=1
)
desired_df = merged_df.groupby('parent_id')['array_column'].agg(list).reset_index()

原merge方法失效原因

pd.merge的left_on参数仅支持列名或列级别的值,你尝试的array_column.['id']无法直接访问数组内部字典的id——因为array_column的每个元素是数组而非单个字典,Pandas无法解析这种嵌套路径。


内容的提问来源于stack exchange,提问作者0hdub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:52:10