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

Pandas如何避免使用for循环批量处理分组任务并存储结果到字典

方案1:字典推导式(最推荐,效率最高)

你原来的显式for循环遍历3个分组键的开销本身极低,用字典推导式可以在等价效率下写出更简洁的代码,完全满足生成目标字典的需求:

import pandas as pd

df = pd.DataFrame({'y':[1,2,3,4,5,6,7,8,9,10],'key1':[1,1,2,2,3,3,4,4,5,5],'key2':[1,2,1,2,1,2,1,2,1,2],'key3':[1,1,1,1,1,2,2,2,2,2]})

def processing(df, grpId):
    df_res = df.groupby([grpId]).agg({'y':'sum'}) 
    return df_res

# 直接用字典推导式生成结果字典,无需显式for循环
grp_list = ['key1', 'key2', 'key3']
df_dict = {grp: processing(df, grp) for grp in grp_list}

方案2:基于apply实现(符合你要求的apply写法)

如果你一定要用apply逻辑实现,可以把分组键列表转为Series后调用apply,再转成字典:

import pandas as pd

df = pd.DataFrame({'y':[1,2,3,4,5,6,7,8,9,10],'key1':[1,1,2,2,3,3,4,4,5,5],'key2':[1,2,1,2,1,2,1,2,1,2],'key3':[1,1,1,1,1,2,2,2,2,2]})

def processing(df, grpId):
    df_res = df.groupby([grpId]).agg({'y':'sum'}) 
    return df_res

grp_list = ['key1', 'key2', 'key3']
# 把分组键转成Series,apply执行处理,最后转字典
df_dict = pd.Series(grp_list).apply(lambda x: processing(df, x)).set_axis(grp_list).to_dict()

补充优化建议:如果你的processing函数内有多个分组键通用的前置计算逻辑,可以把这部分逻辑抽出来提前执行,避免每个分组键都重复计算,能进一步提升整体运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:00