基于Pandas实现日期列减Delta列天数的计算求助
Pandas日期列按天数差计算新日期的解决方案
问题场景
原始数据:
Dates Delta 0 2022-10-01 10 1 2022-10-01 21 2 2022-10-01 34
需求:添加新列CalculatedDate,值为Dates列的日期减去Delta列对应的天数,理想输出:
Dates Delta CalculatedDate 0 2022-10-01 10 2022-09-21 1 2022-10-01 21 2022-09-10 2 2022-10-01 34 2022-08-23
错误原因
原代码中timedelta(days=df['Delta'])无法运行,因为Python标准库的datetime.timedelta只能接收单个数值,不能直接处理Pandas的Series对象。
正确实现代码
方法1:使用Pandas内置的pd.to_timedelta(推荐)
这种方法效率更高,适合处理大数据集:
# importing libraries to create and manipulate toy data import pandas as pd from datetime import datetime, timedelta # create toy data df = pd.DataFrame({'Dates': ['2022-10-01', '2022-10-01', '2022-10-01'], 'Delta': [10, 21, 34]}) # cast the `Dates` column as dates df['Dates'] = pd.to_datetime(df['Dates']) # 正确生成CalculatedDate列 df['CalculatedDate'] = df['Dates'] - pd.to_timedelta(df['Delta'], unit='days') # 查看结果 print(df)
方法2:使用apply逐行处理
适合需要自定义复杂逻辑的场景,但效率略低:
# ... 前面的代码和上面一致 ... df['CalculatedDate'] = df.apply(lambda row: row['Dates'] - timedelta(days=row['Delta']), axis=1)
运行后输出结果符合预期:
Dates Delta CalculatedDate 0 2022-10-01 10 2022-09-21 1 2022-10-01 21 2022-09-10 2 2022-10-01 34 2022-08-23
内容的提问来源于stack exchange,提问作者pkpto39
相关产品推荐
相关产品推荐

