【问题标题】:Create 6 monthly periods in Python [closed]在 Python 中创建 6 个每月周期 [关闭]
【发布时间】:2019-04-05 11:15:33
【问题描述】:

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

我正在尝试计算 6 month periods 在此 Start_of_Intervention 日期前后 5 年的时间。

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)

谁能给点建议?

【问题讨论】:

  • 欢迎您来到 StackOverflow,请编辑您的问题并按照说明进行操作 How to ask,以获得您问题的答案
  • 请分享示例输入和预期输出。

标签: python pandas datetime


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我编辑了“备选方案 2”以涵盖 5 年前和 5 年后的完整期间。
猜你喜欢
  • 2021-06-03
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 2022-06-10
  • 2015-03-04
  • 2015-02-01
  • 2012-06-10
  • 2022-07-06
相关资源
最近更新 更多