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

如何将DataFrame整列传入lambda调用的capm函数而非逐行传值?

解决方案

你不需要用apply(axis=1)逐行传递单个数值,直接把两列整列作为参数传入capm函数即可——毕竟线性回归需要的是一组自变量和因变量序列,而非单个值。

基础版(全局计算单个beta)

先纠正你代码里的函数名笔误(camp应该是capm),然后修改调用逻辑:

# 定义capm函数,接收两个Series类型的列数据
def capm(excess_ret, mkt_exc_ret):
    # 这里写线性回归计算beta的代码,比如用statsmodels实现
    import statsmodels.api as sm
    # 给自变量添加常数项
    X = sm.add_constant(mkt_exc_ret)
    # 拟合OLS模型
    model = sm.OLS(excess_ret, X).fit()
    # 返回beta值(即市场超额收益对应的系数)
    return model.params[1]

# 直接传入整列数据计算beta,赋值给新列
df_final_data['beta'] = capm(df_final_data['Excess_ret'], df_final_data['Mkt_Exc_ret'])

分组版(按维度计算多个beta)

如果你的DataFrame需要按某个维度(比如不同股票、不同行业)分别计算beta,就用groupby结合apply,此时每个分组的子DataFrame会被传入函数,你可以在函数内提取对应列处理:

def capm_by_group(group_df):
    X = sm.add_constant(group_df['Mkt_Exc_ret'])
    model = sm.OLS(group_df['Excess_ret'], X).fit()
    return model.params[1]

# 比如按Stock_Code分组,给每个组计算beta
df_final_data['beta'] = df_final_data.groupby('Stock_Code').apply(capm_by_group).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:35:30