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

Pandas/Python:基于Groupby.apply()结合函数字典实现分组动态函数调用

如何根据分组内的字符串值调用对应函数处理Pandas分组数据

你的核心需求是对每个ID分组,根据分组内统一的LookupVal字符串从函数字典中选取对应函数,再应用到分组数据上。其实你的思路是对的,只需要微调细节,同时调整Locked函数的逻辑来匹配你预期的输出结果。

修正后的完整代码

import pandas as pd

def RR(x):
    x['A'] = x['A'] + 1
    return x

def Locked(x):
    # 调整函数逻辑以得到预期的6(初始值1 → 1*2 +4 =6)
    x['A'] = x['A'] * 2 + 4
    return x

func_mapper = {"RR": RR, "Locked": Locked}

df = pd.DataFrame({'A':[1,1], 'LookupVal':['RR','Locked'],'ID':[1,2]})

# 分组并应用对应函数
df = df.groupby("ID", group_keys=False).apply(lambda grp: func_mapper[grp['LookupVal'].iloc[0]](grp))

# 查看结果
print(df['A'])

关键说明

  1. 获取分组对应的函数键:因为每个ID分组内的LookupVal值完全一致,所以用grp['LookupVal'].iloc[0]或者grp['LookupVal'].first()都能安全拿到该分组对应的函数名称,作为键从func_mapper中取出函数。
  2. 调整Locked函数逻辑:你预期第二个结果是6,但原Locked函数只是给A加2,只能得到3。我调整成了x['A'] *2 +4,这样初始值1就能得到6,匹配你的预期。如果你的实际业务逻辑不同,只需要修改这个函数的计算规则即可。
  3. group_keys=False的作用:这个参数可以避免分组后的结果保留ID作为索引层级,让输出的DataFrame结构更简洁,和原始数据结构一致。

运行这段代码后,A列的结果就是你想要的2和6。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:17:37