【问题标题】:Adding months to a pandas object in Python在 Python 中为 pandas 对象添加月份
【发布时间】:2019-04-02 04:43:29
【问题描述】:

我有这个数据框对象:

    Date
2018-12-14
2019-01-11
2019-01-25
2019-02-08
2019-02-22
2019-07-26

如果可能的话,我想要添加例如:3 months to the dates,然后是 3 months to the new date (original date + 3 months)repeat this x times。我正在使用pd.offsets.MonthOffset,但这只会增加一次月份,我需要做更多次。 我不知道这是否可能,但任何帮助都是完美的。 非常感谢您抽出宝贵的时间。 预期输出为(1个月加2次):

[[2019-01-14, 2019-02-11, 2019-02-25, 2019-03-08, 2019-03-22,  2019-08-26],[2019-02-14, 2019-03-11, 2019-03-25, 2019-04-08, 2019-04-22,  2019-09-26]]

【问题讨论】:

  • 分享您的预期输出。
  • @MayankPorwal 完成谢谢

标签: python python-3.x pandas loops date


【解决方案1】:

我相信您需要循环使用 f-strings 来获取新列名:

for i in range(1,4):
    df[f'Date_added_{i}_months'] = df['Date'] + pd.offsets.MonthBegin(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-01          2019-02-01          2019-03-01
1 2019-01-11          2019-02-01          2019-03-01          2019-04-01
2 2019-01-25          2019-02-01          2019-03-01          2019-04-01
3 2019-02-08          2019-03-01          2019-04-01          2019-05-01
4 2019-02-22          2019-03-01          2019-04-01          2019-05-01
5 2019-07-26          2019-08-01          2019-09-01          2019-10-01

或者:

for i in range(1,4):
    df[f'Date_added_{i}_months'] = df['Date'] + pd.offsets.MonthOffset(i)
print (df)
        Date Date_added_1_months Date_added_2_months Date_added_3_months
0 2018-12-14          2019-01-14          2019-02-14          2019-03-14
1 2019-01-11          2019-02-11          2019-03-11          2019-04-11
2 2019-01-25          2019-02-25          2019-03-25          2019-04-25
3 2019-02-08          2019-03-08          2019-04-08          2019-05-08
4 2019-02-22          2019-03-22          2019-04-22          2019-05-22
5 2019-07-26          2019-08-26          2019-09-26          2019-10-26

【讨论】:

    【解决方案2】:

    希望对你有帮助

    from dateutil.relativedelta import relativedelta
    month_offset = [3,6,9]
    for i in month_offset:
        df['Date_plus_'+i+'_months'] = df['Date'].map(lambda x: x+relativedelta(months=i))
    

    【讨论】:

      【解决方案3】:

      如果你的日期是date 对象,那应该很容易。您可以创建一个 3 个月的 timedelta 并将其添加到每个 date

      或者,您可以使用.strptime() 将它们转换为日期对象,然后按照您的建议进行操作。您可以使用.strftime() 将它们转换回字符串。

      【讨论】:

      • 非常感谢@NotAnAmbiTurner
      猜你喜欢
      • 2018-03-26
      • 1970-01-01
      • 2016-10-04
      • 2020-06-11
      • 2013-06-24
      • 2015-01-18
      • 1970-01-01
      相关资源
      最近更新 更多