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

使用groupby+apply+lambda调用自定义normalize函数失败求助

问题分析与解决方案

错误原因

  1. 索引对齐问题:groupby.apply()返回的结果会保留分组的层级索引,直接赋值给原数据集的新列时,原数据集的索引与返回结果的索引无法匹配,从而触发索引查找相关错误(即你遇到的_engine.get_loc报错)。
  2. 元素取值错误:代码中week[0]是按索引值取元素,而非分组后的第一个元素。如果原数据集的索引不是连续的0起始整数,会取到错误值甚至抛出KeyError。

修正方案

方案一:使用transform替代apply(推荐)

transform会自动返回与原数据集长度一致、索引对齐的结果,无需额外处理。同时修改函数用iloc[0]确保取到分组的第一个元素:

def normalize(week):
    # iloc[0] 取分组后的第一个元素,不受原索引影响
    norm_week = (week / week.iloc[0]) - 1
    return norm_week

# 用transform替代apply,自动对齐索引
dataset['col_1_norm'] = dataset.groupby('week_number')['col_1'].transform(normalize)

方案二:简化为一行代码(无需自定义函数)

直接在transform中写入逻辑,更简洁:

dataset['col_1_norm'] = dataset.groupby('week_number')['col_1'].transform(
    lambda x: (x / x.iloc[0]) - 1
)

验证示例

以你提供的数据集为例,执行后会生成如下结果:

week_numbercol_1col_1_norm
week_13000.0
week_15000.666...
week_23500.0
week_24200.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:48:15