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

如何在Lambda函数中使用多条件判断?基于DataFrame生成Status列

解决DataFrame基于日期生成status列的问题

我来帮你搞定这个需求,咱们先把规则理清楚,再一步步修正代码里的问题。

明确需求规则

首先再确认一遍你要的逻辑:

  • 如果Date是"X"或"Y",或者等于当前日期,status设为 Current
  • 如果Date大于当前日期,status设为 SW Expired
  • 如果Date小于当前日期,status设为 SW Expires {年份}-Q{季度}(比如SW Expires 2018-Q4)
  • 其他任何不符合上述情况的值,status设为 NA

原代码的问题分析

你写的代码有几个明显的问题:

  1. 重复定义df['Qtr'],而且没处理Date是"X"/"Y"的情况,直接用pd.to_datetime会报错
  2. Lambda表达式的逻辑完全混乱,三元运算符嵌套语法错误,还错误引用了其他DataFrame的列
  3. 判断顺序不对,应该先处理特殊值(X/Y、等于当前日期),再处理日期的大小比较

正确实现代码

我给你写了一个清晰的自定义函数,比Lambda更容易维护,也能处理所有边界情况:

import pandas as pd
from datetime import datetime

# 1. 获取当前日期(只保留日期部分,去掉时分秒,避免时间干扰)
current_date = datetime.now().date()

# 2. 定义处理每个Date值的函数
def get_status(date_val):
    # 先处理特殊字符串值X/Y
    if isinstance(date_val, str) and date_val in ["X", "Y"]:
        return "Current"
    
    # 尝试将值转为日期类型,失败则返回NA
    try:
        date = pd.to_datetime(date_val).date()
    except (ValueError, TypeError):
        return pd.NA
    
    # 处理等于当前日期的情况
    if date == current_date:
        return "Current"
    # 处理日期晚于当前的情况
    elif date > current_date:
        return "SW Expired"
    # 处理日期早于当前的情况,生成季度格式
    elif date < current_date:
        year = date.year
        quarter = (date.month - 1) // 3 + 1
        return f"SW Expires {year}-Q{quarter}"
    # 其余情况返回NA
    else:
        return pd.NA

# 3. 应用函数到DataFrame的Date列
df['status'] = df['Date'].apply(get_status)

测试示例

用你给出的测试数据验证一下(模拟当前日期为2019-06-19):

# 测试数据
test_df = pd.DataFrame({
    "Date": ["2019-06-28", "2020-01-20", "2018-07-18", "X", "Y", "2019-06-19"]
})
# 模拟当前日期
current_date = datetime(2019, 6, 19).date()

test_df['status'] = test_df['Date'].apply(get_status)
print(test_df)

输出结果:

Date             status
0  2019-06-28        SW Expired
1  2020-01-20        SW Expired
2  2018-07-18  SW Expires 2018-Q3
3           X            Current
4           Y            Current
5  2019-06-19            Current

这里注意你之前的示例里把2018-07-18写成了SW Expired,其实它早于当前日期,应该生成季度格式,我这里已经修正了这个逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:30