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

如何用pandas按id合并动态列DataFrame并聚合非id列为字典列表

解决方案

可以通过pandas实现该需求,以下是适配动态列场景的高效优化方案,无需硬编码非id字段:

实现思路

  • 先加工DataFrame2:按id字段分组,将每组内除id外的所有动态字段逐行转为字典,聚合为列表
  • 对加工后的DataFrame2和原始DataFrame1做全外连接,匹配id字段
  • 关联后未匹配到的concatinated字段填充为空列表即可

完整代码

import pandas as pd

# 示例数据构造,实际使用时替换为自己的DataFrame读入逻辑即可
df1 = pd.DataFrame({'id': [1, 2, 3], 'dept': [101, 102, 103]})
df2 = pd.DataFrame({'id': [1, 1, 5], 'region1': ['CUD', 'DAS', 'ITF'], 'region2': ['IOP', 'POL', 'IJK']})

# 处理df2:按id聚合并行转字典
df2_agg = df2.groupby('id').apply(
    lambda x: x.drop('id', axis=1).to_dict('records'),
    include_groups=False # pandas 1.x版本可删除该参数,不影响运行结果
).reset_index(name='concatinated')

# 全外连接两个表
res = pd.merge(df1, df2_agg, on='id', how='outer')

# 空值填充为空白列表
res['concatinated'] = res['concatinated'].fillna('').apply(lambda x: x if x else [])

# 查看结果
print(res)

方案优势

  • 完全适配动态列场景:自动识别所有非id字段,字段数量、名称变更时无需修改代码
  • 性能较高:基于pandas原生接口实现,避免手动循环遍历,万级以上数据量也可快速处理
  • 结果完全匹配需求:左表不存在的id对应dept自动设为空值,未关联到数据的行concatinated返回空白列表

内容的提问来源于stack exchange,提问作者Kalai Chelvan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:05