用Python创建6个月度周期

时间:2018-11-01 08:43:26

标签: python pandas datetime

我有一个数据集(简称为df),其中包含一个填充的ID column和一个名为Start_of_Intervention的日期列。

我正在计算6 month periods前后5年内的Start_of_Intervention

The dates are formatted as 20/02/2015 etc.

我认为我需要使用datetime.date,因为我对时间部分不感兴趣,但是在将数据集链接到任何日期函数时遇到了麻烦。

此代码似乎无法正常工作:

dt['START_OF_INTERVENTION2']=dt['START_OF_INTERVENTION'].astype(str) 

dt['START_OF_INTERVENTION3'] = dt['START_OF_INTERVENTION2'].apply( 
lambda x: 
x+relativedelta(months=+6)

有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

避免将常规的Python类型与Pandas混合使用。有大量的熊猫datetime功能可供使用,测试和记录。例如,将系列转换为pd.DateOffset后,可以使用datetime

import pandas as pd

df = pd.DataFrame({'DATE0': ['30/01/2015', '20/02/2015', '10/03/2015']})

df['DATE0'] = pd.to_datetime(df['DATE0'], dayfirst=True)

# ALTERNATIVE 1
df = df.join(pd.concat((df['DATE0'].add(pd.DateOffset(months=6*i)).rename(f'DATE{i}') \
                        for i in range(1, 5)), axis=1))

# ALTERNATIVE 2
df = df.assign(**{f'DATE{i}': df['DATE0'].add(pd.DateOffset(months=6*i)) \
                  for i in range(1, 5)})

print(df)

       DATE0      DATE1      DATE2      DATE3      DATE4
0 2015-01-30 2015-07-30 2016-01-30 2016-07-30 2017-01-30
1 2015-02-20 2015-08-20 2016-02-20 2016-08-20 2017-02-20
2 2015-03-10 2015-09-10 2016-03-10 2016-09-10 2017-03-10