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

如何在Pandas中计算每行baseline_date与days列相加后的最大日期并生成新列

实现方法:为Pandas DataFrame每行计算日期相加后的最大值

嘿,这个需求我之前做项目时刚好碰到过,给你分享几种靠谱的实现方式,按需选择就行:

方法一:使用apply逐行计算(直观易懂,适合小数据集)

这种方法逻辑最直接,对每行单独处理,把三个日期算出来再取最大值:

import pandas as pd

# 先确保baseline_date是datetime类型(如果原始数据是字符串的话)
df['baseline_date'] = pd.to_datetime(df['baseline_date'])

# 定义逐行处理的函数
def get_max_date(row):
    date1 = row['baseline_date'] + pd.Timedelta(days=row['days_1'])
    date2 = row['baseline_date'] + pd.Timedelta(days=row['days_2'])
    date3 = row['baseline_date'] + pd.Timedelta(days=row['days_3'])
    return max(date1, date2, date3)

# 生成新列max_date
df['max_date'] = df.apply(get_max_date, axis=1)

方法二:矢量化操作(高效,适合大数据集)

apply在数据量大的时候会有点慢,用矢量化的方式直接列运算,速度会快很多:

import pandas as pd

# 同样先确保baseline_date是datetime类型
df['baseline_date'] = pd.to_datetime(df['baseline_date'])

# 分别计算三个日期列
df['date_1'] = df['baseline_date'] + pd.to_timedelta(df['days_1'], unit='D')
df['date_2'] = df['baseline_date'] + pd.to_timedelta(df['days_2'], unit='D')
df['date_3'] = df['baseline_date'] + pd.to_timedelta(df['days_3'], unit='D')

# 按行取最大值,axis=1表示横向取数
df['max_date'] = df[['date_1', 'date_2', 'date_3']].max(axis=1)

# 如果不需要中间的日期列,可以直接删掉
df = df.drop(columns=['date_1', 'date_2', 'date_3'])

补充小技巧:一行搞定的简化写法

如果不想生成中间列,也可以用pd.concat把三个计算后的序列合并,再直接取最大值:

df['max_date'] = pd.concat([
    df['baseline_date'] + pd.to_timedelta(df['days_1'], unit='D'),
    df['baseline_date'] + pd.to_timedelta(df['days_2'], unit='D'),
    df['baseline_date'] + pd.to_timedelta(df['days_3'], unit='D')
], axis=1).max(axis=1)

这里要注意两个关键点:

  • 必须保证baseline_date是datetime类型,否则日期相加会报错,原始是字符串的话一定要用pd.to_datetime转换
  • 列级运算时用pd.to_timedelta比pd.Timedelta更适配,它能直接接收整数列作为参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:15:09