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

时间:2020-05-06 18:14:44

标签: python pandas datetime

我正在尝试确定结束日期,并且成功了,但是代码需要很长时间才能运行。如何改善以下代码?另外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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

 example2 :: RIO Env ()
 example2 = call foo 0 "fooarg"

 example3 :: RIO Env Int
 example3 = call bar 3

您正在遍历数据框,应避免这样做。尝试尽可能直接使用pandas API,以使用其基础性能优化。

此外,您正在手动递增df['end_date'] = df['start_date'].date() + dt.timedelta(df['term']*365/12) i,但是它们也是j循环中的索引,因此由循环运算符递增。因此,不必手动增加它们。