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

pandas统计每行症状Yes值总数创建新列报真值歧义错误求解

报错根因

你传入自定义函数的df["Cough"]、df["Myalgia"]等对象是pandas的整列数据(Series类型),不是单个单元格的取值。当你在if条件里写Cough == "Yes"时,得到的是一整列由True/False组成的布尔序列,Python无法将一组布尔值判定为单个真/假值来走分支逻辑,就会抛出这个歧义错误。

原代码的额外逻辑问题

除了触发报错的传参错误,你的函数本身还有两个逻辑bug,就算解决传参问题也无法得到正确结果:

  • 分支判断用了elif,只要靠前的某一列值为Yes,后续所有列的判断都会被跳过,无法统计所有症状列的Yes总数
  • 计数变量number定义在函数外部,既存在作用域修改报错的问题,也会导致计数跨样本累计,无法实现逐行单独统计的需求。
推荐实现方案

pandas做这类逐行统计优先用向量化运算,不需要写自定义遍历函数,运行效率远高于逐行循环,代码也更简洁:

# 所有需要统计的症状列统一放在列表中,后续增减列直接修改列表即可
symptom_columns = ["Cough", "Myalgia", "Headache", "SoreThroat", "Fatigue"]
df["NumberSymptoms"] = (df[symptom_columns] == "Yes").sum(axis=1)

运行后直接得到符合预期的结果,和你给出的示例表计算规则完全匹配。

如果你确实需要用自定义函数实现(仅作参考,大数据量下性能差),需要配合apply指定按行传入数据,且把计数变量放在函数内部:

def count_symptoms(single_row):
    symptom_count = 0
    for col in ["Cough", "Myalgia", "Headache", "SoreThroat", "Fatigue"]:
        if single_row[col] == "Yes":
            symptom_count += 1
    return symptom_count

df["NumberSymptoms"] = df.apply(count_symptoms, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:45:49