Python 使用循环使用DateOffSet计算不同天数的差异

Python 使用循环使用DateOffSet计算不同天数的差异,python,python-2.7,date,pandas,datetime,Python,Python 2.7,Date,Pandas,Datetime,在接下来的五个星期六享有盛名: start_date = 0 04.03.2017 1 11.03.2017 2 18.03.2017 3 25.03.2017 4 01.04.2017 还有一个我用来计算结束日期的列表 duration = [4, 8, 15, 22]. 我想创建一个基于开始日期加上持续时间的新框架,例如 start_date[0] = duration[0] = 07.03.2017 start_date[1] = duration[0]

在接下来的五个星期六享有盛名:

start_date =
0    04.03.2017
1    11.03.2017
2    18.03.2017
3    25.03.2017
4    01.04.2017
还有一个我用来计算结束日期的列表

duration = [4, 8, 15, 22].
我想创建一个基于开始日期加上持续时间的新框架,例如

start_date[0] = duration[0] = 07.03.2017
start_date[1] = duration[0] = 11.03.2017
start_date[2] = duration[0] = 18.03.2017
...
我尝试使用pd.DateOffset解决此问题:

for j in range(len(duration)):
  end_date = []
  for i in start_dates:
      # get offset date, convert it and append it to end_date list
      z = pd.to_datetime(i) + pd.DateOffset(days=duration[(j)])
      end_date.append(z.strftime("%d.%m.%Y"))
但是,我得到以下输出:

['07.04.2017', '07.11.2017', '22.03.2017', '29.03.2017', '08.01.2017']
问题在哪里?是因为DateOffset函数吗?不幸的是,我看不到关于出口的模式

有什么提示吗


谢谢,Mark

问题不在于
DateOffset()
。问题是将日期字符串传递给熊猫时没有指定日期格式

所以熊猫在猜测日期格式。您应该做的是在使用
时将
format
参数传递到\u datetime()


使用try&error,我找到了另一个解决方案(已测试)


我知道,与之前发布的解决方案相比,它并没有那么优雅,但它也很有效

我没有考虑指定日期格式。这是有道理的。你的代码有效!非常感谢。
df
   start_date
0  04.03.2017
1  11.03.2017
2  18.03.2017
3  25.03.2017
4  01.04.2017

df['py_start_date'] = pd.to_datetime(df['start_date'], format='%d.%m.%Y')

   start_date py_start_date
0  04.03.2017      2017-03-04
1  11.03.2017      2017-03-11
2  18.03.2017      2017-03-18
3  25.03.2017      2017-03-25
4  01.04.2017      2017-04-01

for d in duration:
    df['offset {}'.format(d)] = df['py_start_date'] + pd.DateOffset(days=d)

    start_date py_start_date   offset 4   offset 8  offset 15  offset 22
0  04.03.2017      2017-03-04 2017-03-08 2017-03-12 2017-03-19 2017-03-26
1  11.03.2017      2017-03-11 2017-03-15 2017-03-19 2017-03-26 2017-04-02
2  18.03.2017      2017-03-18 2017-03-22 2017-03-26 2017-04-02 2017-04-09
3  25.03.2017      2017-03-25 2017-03-29 2017-04-02 2017-04-09 2017-04-16
4  01.04.2017      2017-04-01 2017-04-05 2017-04-09 2017-04-16 2017-04-23
for j in range(len(duration)):
  date_offset = []
  for i in start_dates:
     k = duration[j]
     d = datetime.datetime.strptime(i, "%d.%m.%Y")
     d = d + datetime.timedelta(days=k)
     date_offset.append(d.strftime("%d.%m.%Y"))

  # Transfer date_offset list into four seperate offset series depending on k
  if k == 4:
     offset_4 = pd.Series(date_offset)
  elif k == 8:
     offset_8 = pd.Series(date_offset)
  elif k == 15:
     offset_15 = pd.Series(date_offset) 
  else:
     offset_22 = pd.Series(date_offset)