【问题标题】:Python Date mid-way between two dates两个日期之间的 Python 日期
【发布时间】:2017-04-05 11:31:27
【问题描述】:

我有一个如下所示的 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)

但是,我在最后 2 列中苦苦挣扎。谁能提供一些帮助?

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案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
    

    您可以完成 2 列:

    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 具有相同的内容?

    【讨论】:

    • 谢谢 dt 是什么?是我需要导入的外部库吗?
    • .dt 是任何 Series 中可用的属性,包含类似对象的日期时间,并且包含与日期时间相关的方法,例如我们的例子中的 ceil()。见pandas.pydata.org/pandas-docs/stable/…
    • 谢谢,当尝试使用 BDay 减去时,即 df['Start_Date'] = df['SeriesDate'] - BDay(10)。我收到 TypeError:ufunc 减法不能使用类型为 dtype('
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2018-01-11
    • 2020-07-19
    相关资源
    最近更新 更多