给定开始日期和月数,计算结束日期P

2024-09-27 19:11:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试计算结束日期,并且已经成功,但是代码需要很长时间才能运行。如何改进以下代码?另外df['end_date']是一个新变量吗?我试过: df['end_date'] = [], 并附加它,但得到一个长度错误。因此,我写了下面的感谢信,d

i = 0
j = 0
df['end_date'] = df['start_date']
for i in range(len(df['start_date'])):
    for j in range(len(df['term'])):
        df['end_date'] = (df['start_date'][i].date() +  dt.timedelta(df['term'][j]*365/12))
        i+=1
        j+=1

我的数据集看起来像:

开始日期期限

  1. 2010-03-01 24
  2. 2009-11-01 36
  3. 2012-08-01 24

Tags: 数据代码indffordatelen错误
2条回答

假设“end_date”是一个日期时间,类似这样的东西应该可以工作:

df['end_date'] = df['start_date'] + pd.to_timedelta(df['term']*365/12, unit='d')

但是,处理月份偏移的正确方法是使用pd.DateOffset

# if the offset was the same for all records, it would be ok to just
# offsets = pd.DateOffset(months=the_offset)
# but here, we need to handle different values
offsets = df['term'].map(lambda term: pd.DateOffset(months=term))
df['end_date'] = df['start_date'] + offsets

如果我正确理解您想要实现的目标,您应该能够做到:

df['end_date'] = df['start_date'].date() +  dt.timedelta(df['term']*365/12)

您正在数据帧上循环,应该避免这种情况。尽量直接使用pandas API来使用其底层性能优化

此外,您正在手动递增ij,但这些也是for循环中的索引,因此由循环运算符递增。因此,不必手动增加它们

相关问题 更多 >

    热门问题