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

如何在Pandas分组聚合的自定义函数中引用另一个DataFrame参数?

解决方案

核心思路

先把df1的scale值映射到df2的对应分组键上,避免在聚合函数中加载整个df1导致内存溢出,再基于带scale值的df2执行分组聚合。

具体步骤

  1. 将df1转换为字典,用于快速查找scale值(内存占用远低于DataFrame):
scale_map = df1['scale'].to_dict()  # 结果:{'a':10, 'b':20, 'c':30}
  1. 把scale值关联到df2中(这里假设df2的第一级索引id对应df1的name索引,若对应关系不同,替换映射的列即可):
# 重置df2索引以便添加scale列
df2_with_scale = df2.reset_index()
# 映射scale值到df2
df2_with_scale['scale'] = df2_with_scale['id'].map(scale_map)
# 恢复原索引
df2_with_scale = df2_with_scale.set_index(['id', 'name'])
  1. 修改自定义聚合函数,直接从分组中获取scale值并计算:
import pandas as pd

def myfun(group):
    # 同一组的scale值相同,取第一个即可
    s = group['scale'].iloc[0]
    # 这里替换成你的复杂计算逻辑,示例为列值乘以scale
    return pd.Series({
        'c1': group['c1'] * s,
        'c2': group['c2'] * s
    })

# 执行分组聚合
result_df = df2_with_scale.groupby(['id', 'name']).apply(myfun)

为什么适合超大规模数据

  • 用字典映射替代传递整个df1,内存占用大幅降低
  • 提前关联scale值,分组时无需再跨DataFrame查找,计算效率更高
  • map是列级操作,比merge更适合处理超大数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:10:36