我有一个如下所示的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)
然而,我正在努力争取最后两列。有人可以提供一些帮助吗?
答案 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_Date
和SeriesDate
具有相同的内容?