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

如何传入DataFrame两列作为*args和**kwargs,用relativedelta生成新日期列

问题原因

你之前的代码存在两处核心问题:

  1. 使用dict(zip(df.freq,df.time_int))构造字典时,字典的键具有唯一性,重复的freq会被后出现的值覆盖,最终只能得到每个freq对应的最后一个time_int值
  2. 直接将单个relativedelta对象和日期列相加,会让所有行都使用同一个偏移量,无法实现逐行按不同参数计算

解决方法

使用apply按行遍历DataFrame,每行单独构造对应参数的偏移量计算即可,完整代码如下:

import pandas as pd
from dateutil.relativedelta import relativedelta

# 构造测试数据(你已有df可以跳过这步)
df = pd.DataFrame({
    'date': pd.to_datetime(['2021-11-16']*7),
    'time_int': [-5, -1, -2, -3, -3, -1, -1],
    'freq': ['days', 'weeks', 'weeks', 'weeks', 'weeks', 'months', 'months']
})

# 逐行计算新日期
df['new_date'] = df.apply(
    lambda row: row['date'].date() + relativedelta(**{row['freq']: row['time_int']}),
    axis=1
)

运行后得到的new_date列和你期望的输出完全一致。如果需要new_date列为datetime格式,去掉.date()即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:01