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

Python lambda apply函数使用循环生成列计算相关系数报错解决方案

问题解决方法

报错原因

你收到'DataFrame' object has no attribute 'col'报错的核心原因是:点式取列语法df.列名仅支持固定的列名字面量,无法识别循环变量col。你写的v.col+'_sec_rr'会被pandas解析为「查找v的名为col的属性」,而不是把循环变量col的值拼接成列名。

修正后的代码

你只需要改用方括号索引df[列名]的方式取动态列名即可,参考修改逻辑:

for col in colname:
    # 原有生成新列的逻辑保持不变
    df[col+'_RR'] = df['p_'+col] - df['r2500_ret']
    df[col+'_sec_rr'] = df['ret'] - df[col+'_RR']
    
    # 先拼接好本轮要计算的两个动态列名
    rr_col = f"{col}_RR"
    sec_rr_col = f"{col}_sec_rr"
  
    # 修正相关系数计算逻辑
    dfcorr = df.groupby('symbol').apply(lambda v: v[sec_rr_col].corr(v[rr_col])).to_frame().rename(columns={0:'jets_correlation'})
    
    # 如果需要把计算得到的相关系数合并回原df,可加下面这行
    # df = df.merge(dfcorr, on='symbol', how='left')

额外优化建议

如果不需要单独保存每个分组的相关系数表,只想把相关系数回填到原DataFrame对应分组的所有行,可以直接用transform逻辑减少一次merge操作:

df[f"{col}_jets_correlation"] = df.groupby('symbol').apply(
    lambda x: x[sec_rr_col].corr(x[rr_col])
).reindex(df['symbol']).values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03