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

如何在Pandas Series上应用多if条件并生成新列与结果列表

解决Pandas Series多条件计算并生成新列/结果列表的问题

现有基础代码

你已有的阈值字典和温度Series定义如下:

cardinal_Temp = ["Tbas_veg", "Topt1_veg", "Topt2_veg","Tmax_veg"]
wheat_CardTemp_vegetative = [4, 22, 28, 38]
Veg_CardTemp= dict(zip(cardinal_Temp, wheat_CardTemp_vegetative))

# 每日温度Series(假设Date_Tmean是你的DataFrame)
Tmean = Date_Tmean["Tmean"]

原代码的问题

你写的脚本存在几个关键问题:

  1. 语法错误:第一个if语句缺少闭合括号,最后一个elif多了一个右括号
  2. 向量判断错误:直接对Series用标量式的if-else会报错,因为Series是多元素向量,条件返回的是布尔值组成的Series,而非单个布尔值
  3. 无效赋值:最后一行Tempfunction = df[]会生成空值,导致结果异常

正确实现方案

方案一:用numpy.select(矢量化操作,效率最高)

适合处理大体积数据集,比逐行处理快得多:

import numpy as np

# 提前提取阈值,简化代码
t_bas = Veg_CardTemp["Tbas_veg"]
t_opt1 = Veg_CardTemp["Topt1_veg"]
t_opt2 = Veg_CardTemp["Topt2_veg"]
t_max = Veg_CardTemp["Tmax_veg"]

# 定义条件列表(按优先级排序)
conditions = [
    (Tmean > t_bas) & (Tmean < t_opt1),
    (Tmean >= t_opt1) & (Tmean <= t_opt2),
    (Tmean > t_opt2) & (Tmean < t_max),
    (Tmean <= t_bas) | (Tmean >= t_max)
]

# 定义对应条件的计算结果
values = [
    (Tmean - t_bas) / (t_opt1 - t_bas),
    1,
    (t_max - Tmean) / (t_max - t_opt2),
    0
]

# 执行多条件计算
temp_function = np.select(conditions, values)

# 将结果存入原DataFrame的新列
Date_Tmean["TempFunction"] = temp_function

# 转换为结果列表
result_list = temp_function.tolist()

方案二:用Series.apply(逐行处理,逻辑直观)

如果更习惯逐行判断的写法,可以用apply,但效率略低于矢量化操作:

def calculate_temp_func(temp):
    t_bas = Veg_CardTemp["Tbas_veg"]
    t_opt1 = Veg_CardTemp["Topt1_veg"]
    t_opt2 = Veg_CardTemp["Topt2_veg"]
    t_max = Veg_CardTemp["Tmax_veg"]
    
    if t_bas < temp < t_opt1:
        return (temp - t_bas) / (t_opt1 - t_bas)
    elif t_opt1 <= temp <= t_opt2:
        return 1
    elif t_opt2 < temp < t_max:
        return (t_max - temp) / (t_max - t_opt2)
    else:
        return 0

# 应用函数到温度Series
temp_function = Tmean.apply(calculate_temp_func)

# 存入新列
Date_Tmean["TempFunction"] = temp_function

# 转换为结果列表
result_list = temp_function.tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:20:19