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

如何高效实现DataFrame按数组交集关联并分组聚合

高效实现方案

核心思路

利用Pandas的explode展开数组,通过公共元素关联两个DataFrame,再去重分组聚合,避免低效的逐行循环操作。

步骤代码

先构造示例数据:

import pandas as pd

df1 = pd.DataFrame({
    'c1': [1, 8],
    'c2': [2, 9],
    'c3': [[1,2,3,4], [10,11]]
})

df2 = pd.DataFrame({
    'c4': [3, 5],
    'c5': [4, 6],
    'c6': [[1,2], [2,3]]
})

执行以下高效操作:

  1. 展开数组列:将两个DataFrame的数组列拆分为单行单元素,简化关联逻辑
df1_exp = df1.explode('c3', ignore_index=True)
df2_exp = df2.explode('c6', ignore_index=True)
  1. 关联并去重:通过展开后的公共元素完成关联,同时去重避免同一匹配对因多个交集元素重复出现
merged = df1_exp.merge(df2_exp, left_on='c3', right_on='c6')
# 保留唯一的(df1行, df2行)组合
merged_unique = merged.drop_duplicates(subset=['c1', 'c2', 'c4', 'c5'])
  1. 分组聚合生成结果:按c1、c2分组,将匹配的df2行转换为字典列表存入r1列
result = merged_unique.groupby(['c1', 'c2']).apply(
    lambda x: x[['c4', 'c5']].to_dict('records')
).reset_index(name='r1')

最终结果

输出的result如下:

c1  c2                     r1
0   1   2  [{'c4': 3, 'c5': 4}, {'c4': 5, 'c5': 6}]

性能优势

  • 全程使用Pandas内置的向量化/优化方法,避免了iterrows这类低效逐行迭代操作
  • 对于数组元素较多的场景,explode+merge的内存和时间效率远高于手动循环判断交集
  • 去重步骤确保分组聚合时不会产生重复的df2行记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:48