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

如何使用Scipy最小化函数为Pandas DataFrame每行新增计算字段

问题原因

  1. scipy.optimize.minimize_scalar是标量优化工具,单次仅支持一组标量参数的优化计算,直接传入DataFrame整列(Series类型)会导致目标函数返回数组,优化器无法处理。
  2. 目标函数中使用的math.sqrt仅支持标量输入,传入Series会直接触发类型错误。

解决方案

对DataFrame逐行调用优化函数,为每行单独计算对应的隐含增长率,同时简化原有绝对值计算逻辑避免math模块的标量限制。完整实现代码如下:

from scipy.optimize import minimize_scalar
import pandas as pd

# 预处理字段
df['shares_outstanding_in_millions'] = df['shares_(diluted)'] / 1000000
df['owners_income_m'] = df['owners_income'] / 1000000

# 定义单行隐含增长率计算函数
def calc_implied_growth(row):
    current_price = row['share_price']
    shares = row['shares_outstanding_in_millions']
    owners_income = row['owners_income_m']
    
    def growth_needed(x):
        # 基础参数配置
        fcf_growth_1_to_5 = x / 100
        fcf_growth_6_to_10 = fcf_growth_1_to_5 / 2
        terminal_growth_rate = 0.03
        cost_of_capital = 0.1
        
        # 计算10年自由现金流
        fcf = [0]*11
        fcf[1] = owners_income * (1 + fcf_growth_1_to_5)
        for i in range(2,6):
            fcf[i] = fcf[i-1] * (1 + fcf_growth_1_to_5)
        for i in range(6,11):
            fcf[i] = fcf[i-1] * (1 + fcf_growth_6_to_10)
        
        # 计算终值和各期现值
        term_value = (fcf[10] * (1 + terminal_growth_rate)) / (cost_of_capital - terminal_growth_rate)
        pv_sum = sum([fcf[i]/((1+cost_of_capital)**i) for i in range(1,11)])
        pv_tv = term_value / ((1+cost_of_capital)**11)
        
        intrinsic_value_per_share = (pv_sum + pv_tv) / shares
        # 等价替换原有sqrt(平方)的绝对值计算逻辑
        return abs(intrinsic_value_per_share - current_price) + x
    
    try:
        res = minimize_scalar(growth_needed, method='bounded', bounds=(-50, 100))
        return res.x / 100
    except:
        # 优化失败返回空值避免整表计算中断
        return float('nan')

# 逐行计算生成新字段
df['implied_growth'] = df.apply(calc_implied_growth, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:03