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

Pandas Groupby与Lambda报错:缺少必要位置参数'y'的解决求助

问题:按Symbol分组生成'Lower Low'列时报错的修复方法

我有一个包含不同Symbol及其对应价格的mod_df数据框,原代码可正常生成'Lower Low'列:

mod_df['Lower Low'] = np.where((mod_df['Helper_L'] != mod_df['Helper_L'].shift(-1))
                      & (mod_df['Price'] < mod_df['Price'].shift(1))
                      & (mod_df['Price'] < mod_df['Price'].shift(-1)), 'Lower Low', '')

但当尝试按'Symbol'分组并使用Lambda函数执行如下代码时,出现错误:TypeError: mod..() missing 1 required positional argument: 'y'

mod_df['Lower Low'] = mod_df.groupby('Symbol')[['Helper_L', 'Price']].transform(lambda x, y: (np.where((x != x.shift(-1)) & (y < y.shift(1)) & (y < y.shift(-1)), 'Lower Low', '')))

修复方法

报错原因是:当通过groupby传入多列列表时,transform会将每个分组的完整子DataFrame传递给lambda,而非将列拆分为单独的x、y参数。以下是两种可行的修复方式:

方式1:在lambda中直接访问子DataFrame的列

mod_df['Lower Low'] = mod_df.groupby('Symbol').transform(
    lambda df: np.where(
        (df['Helper_L'] != df['Helper_L'].shift(-1))
        & (df['Price'] < df['Price'].shift(1))
        & (df['Price'] < df['Price'].shift(-1)),
        'Lower Low',
        ''
    )
)

方式2:使用apply配合explode实现相同效果

mod_df['Lower Low'] = mod_df.groupby('Symbol').apply(
    lambda df: np.where(
        (df['Helper_L'] != df['Helper_L'].shift(-1))
        & (df['Price'] < df['Price'].shift(1))
        & (df['Price'] < df['Price'].shift(-1)),
        'Lower Low',
        ''
    )
).explode().reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:25:07