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

使用lifelines的CoxPHFitter做生存分析时遇Series真值歧义错误

问题排查:lifelines CoxPHFitter 拟合时的 ValueError 错误

错误根源

核心问题:CoxPHFitter.fit()方法的duration_col和event_col参数需要传入列名字符串,而非直接传入pandas Series对象。

你当前传入的T = df['survival_time']和E = df['event_occurred']都是Series,当lifelines内部尝试判断self.event_col的布尔值时(如代码逻辑if self.event_col else ...),会触发pandas的经典报错——无法直接判断一个Series的真假,必须用any()/all()等方法,这就是你看到ValueError: The truth value of a Series is ambiguous的原因。

两种修正方案

方案1:合并生存数据到特征框,传入列名字符串

先把生存时间、事件状态列合并到特征数据框X中,再指定列名拟合:

from lifelines import CoxPHFitter
import pandas as pd

# 合并生存数据到特征数据框
X_combined = pd.concat([X, df['survival_time'], df['event_occurred']], axis=1)

# 拟合模型,传入列名字符串
coxph = CoxPHFitter()
coxph.fit(X_combined, duration_col='survival_time', event_col='event_occurred')

print(coxph.summary())

方案2:直接使用原始全量数据框,指定列名

如果原始df已包含所有特征(CHOL、sex、age)和生存数据,可直接用df拟合:

from lifelines import CoxPHFitter

coxph = CoxPHFitter()
# 用原始df,指定生存时间、事件列,同时通过formula指定特征列
coxph.fit(df, duration_col='survival_time', event_col='event_occurred', formula="CHOL + sex + age")

print(coxph.summary())

也可以省略formula,让模型自动使用df中除生存、事件列外的所有列作为特征。

验证说明

两种方案本质都是让duration_col和event_col接收字符串类型的列名,而非Series对象,从而让lifelines内部正确识别并处理数据,解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:32:31