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

Pandas按ID匹配后将映射表多行值聚合为列表列的方法

Pandas 按匹配键聚合关联列生成列表列实现方案

以下两种实现方式均无需构建冗余临时DataFrame,执行效率显著高于逐行遍历、多轮临时表赋值的写法,可直接复用。

方法1:分组聚合后映射(性能最优,推荐大数据量使用)

核心逻辑是先对映射表按关联键做聚合,生成键到编码列表的字典,直接映射到主表,避免全表关联的额外开销:

import pandas as pd

# 对映射表按关联id分组,将对应Code聚合为列表,转为映射字典
code_mapping = map_df.groupby('id_for_map')['Code'].agg(list).to_dict()
# 直接映射生成新列
main_df['code'] = main_df['id'].map(code_mapping)

如果存在主表id在映射表中无匹配的场景,对应位置会返回NaN,需要补空列表的话追加一行处理即可:

main_df['code'] = main_df['code'].fillna(main_df['code'].apply(lambda x: []))

方法2:左连接后聚合(逻辑直观,适合复杂关联场景)

如果后续需要在关联过程中增加字段筛选、多表关联等复杂逻辑,可以用左连接保留主表全部行后,再按主表唯一键聚合:

# 左连接关联两张表
merged_df = pd.merge(
    main_df,
    map_df[['id_for_map', 'Code']],
    left_on='id',
    right_on='id_for_map',
    how='left'
)
# 按主表原有字段分组,聚合Code为列表
main_df = merged_df.groupby(['name', 'id'], as_index=False)['Code'].agg(list).rename(columns={'Code':'code'})

结果校验

两种方法执行后得到的main_df完全匹配预期结构:

name  id        code
0  'tree'   0      ['aa']
1   'foo'   1  ['ab','ac']
2 'apple'   2  ['ba','bb']
3 'table'   3      ['bb']

内容的提问来源于stack exchange,提问作者Botond Nagy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:51:06