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

如何用if语句或Lambda函数基于两个日期列返回特定字符串?

基于日期差返回特定字符串的实现方案

嘿,我来帮你搞定这个需求!先回顾下你已经完成的工作:你已经筛选出了状态为Traded Away且到期日不为0的记录,把日期转成了datetime类型,还计算出了到期日与当前日期的天数差,这一步已经为后续的判断打好了基础。

接下来我们只需要基于Days的数值,按照你的规则返回对应的字符串就行。下面是具体的实现步骤和代码:

第一步:优化日期差计算(转成整数天数)

你当前的Days列是timedelta类型,我们可以提取其中的整数天数,这样后续的条件判断会更直观:

import numpy as np
import pandas as pd

# 你的现有代码(做了一点小优化:去掉时分秒避免误差)
df_Date = df[df['state'].str.contains('Traded Away') & df['maturity_date']!=0][['state','maturity_date']]
df_Date['maturity_date'] = pd.to_datetime(df_Date['maturity_date'])
df_Date['Today'] = pd.to_datetime('today').normalize()  # 去掉时分秒,确保日期比较的准确性
df_Date['Days'] = (df_Date['maturity_date'] - df_Date['Today']).dt.days  # 提取整数天数

第二步:定义规则并生成结果字符串

我们可以用np.select来批量处理多条件判断,这种方法比循环apply效率高很多,适合大数据量的场景。下面是示例规则(你可以根据实际需求修改):

  • 如果Days < 0:到期日已过,返回"已过期"
  • 如果0 ≤ Days ≤ 30:30天内到期,返回"即将到期(30天内)"
  • 如果Days > 30:距离到期还有一段时间,返回"距离到期还有X天"(X为具体天数)

对应的代码如下:

# 定义判断条件列表
conditions = [
    df_Date['Days'] < 0,
    (df_Date['Days'] >= 0) & (df_Date['Days'] <= 30),
    df_Date['Days'] > 30
]

# 定义对应条件的返回字符串
choices = [
    "已过期",
    "即将到期(30天内)",
    df_Date['Days'].apply(lambda x: f"距离到期还有{x}天")
]

# 添加新列存储结果
df_Date['Status'] = np.select(conditions, choices, default="未知状态")

# 查看结果
print(df_Date.head(10))

示例输出

运行后你会得到类似这样的结果:

state maturity_date Today Days Status
0 Traded Away 2018-03-15 2024-05-20 -2258 已过期
10 Traded Away 2025-06-15 2024-05-20 391 距离到期还有391天
20 Traded Away 2024-06-10 2024-05-20 21 即将到期(30天内)

如果你需要调整判断规则,只需要修改conditions和choices列表即可,比如可以增加“90天内到期”“180天内到期”等更多细分规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:29