Python日期在两个日期之间的中间

时间:2017-04-05 11:31:28

标签: python python-2.7 pandas

我有一个如下所示的DataFrame:

raw_data = {'Series_Date':['2017-03-10','2017-03-13','2017-03-14','2017-03-15'],'SeriesDate':['2017-03-10','2017-03-13','2017-03-14','2017-03-15']}
import pandas as pd
df = pd.DataFrame(raw_data,columns=['Series_Date','SeriesDate'])
print df

对于这个DF,我想在最后添加四列:

1)Start_Date = SeriesDate - 10个工作日

2)End_Date = SeriesDate - 3个工作日

3)Date_Difference =(End_Date - Start_Date)/ 2。但是,如果日期差异为4.5天,则该值应为5而不是4,即它应该向上舍入。

4)Roll_Date = End_Date - 'Date_Difference'营业日。即如果Date_Difference为5,则Roll_Date = End_Date - 5个工作日

我可以按如下方式追加前两列:

from pandas.tseries.offsets import BDay
df['Start_Date'] = df['SeriesDate'] - BDay(10)
df['End_Date'] = df['SeriesDate'] - BDay(3)

然而,我正在努力争取最后两列。有人可以提供一些帮助吗?

1 个答案:

答案 0 :(得分:1)

一旦你有df

  Series_Date Start_Date   End_Date
0  2017-03-10 2017-02-24 2017-03-07
1  2017-03-13 2017-02-27 2017-03-08
2  2017-03-14 2017-02-28 2017-03-09
3  2017-03-15 2017-03-01 2017-03-10

您可以填写以下两列:

df['Date_Difference'] = ((df.End_Date - df.Start_Date) / 2).dt.ceil('D')
df['Roll_Date'] = df.End_Date - pd.Series(BDay(dd.days) for dd in df.Date_Difference)

说明:

(df.End_Date - df.Start_Date) / 2)提供了一系列时间表。 .dt.ceil('D')围绕这一系列发展至今。

pd.Series(BDay(dd.days) for dd in df.Date_Difference)根据Date_Difference中的天数创建一系列营业日。 (很可能有更好的方法,但我是熊猫的新手。)

附带问题:为什么您有两列Series_DateSeriesDate具有相同的内容?