【问题标题】:How to divide a date range into sets of 2 months with Pandas?如何使用 Pandas 将日期范围划分为 2 个月的集合?
【发布时间】:2021-01-07 05:00:45
【问题描述】:

我正在尝试设置一个逻辑来计算使用pd.Timestamp 生成的日期范围内的月数。我能够获得日期中的月数,但我不知道如何使用 Pandas 来获取日期范围并将其划分为 2 个月。例如: 如果日期范围是 '2020-09-01' - '2021-01-01',它应该返回 ['2020-09-01'-'2020-11-01', '2020-11-01' - '2021-01-01']。到目前为止,这是我的代码:

def get_installs_time(client, appId, startDate, endDate):
    startStamp = pd.Timestamp(startDate)
    endStamp = pd.Timestamp(endDate)
    months = (endStamp.to_period('M') - startStamp.to_period('M'))

如果日期范围内的总月数为 3,则集合应分别为两个月和第三个月之一。

如何在此代码的基础上构建并将日期范围拆分为 2 个月?

【问题讨论】:

  • 这个日期范围和 N=3 个月的预期结果是什么?
  • 为了让问题更简单,让我们保持 N=2。

标签: python pandas


【解决方案1】:

仍然没有答案?如果在本月的第一天提供了开始日期(如所示),则以下内容并不漂亮,但可以将时间范围切成块并休息:

import pandas as pd

def get_installs_time(client, appId, startDate, endDate, blockLength):
    s = pd.date_range(start=startDate, end=endDate, freq=str(blockLength)+"MS", closed="left")
    e = (s[1:]-pd.to_timedelta(1, unit='D'))
    return list(zip(s.strftime('%Y-%m-%d').tolist(), e.strftime('%Y-%m-%d').tolist() + [endDate]))

print(get_installs_time("X", "Y", '2020-03-01', '2021-01-01', 3))

样本输出:

[('2020-03-01', '2020-05-31'), ('2020-06-01', '2020-08-31'), ('2020-09-01', '2020-11-30'), ('2020-12-01', '2021-01-01')]

【讨论】:

  • 在你回答之前,我真的是走pd.date_range 路线。它帮助完成了我的代码。非常感谢。
  • 实际上,我希望这能引起更熟悉 pandas 功能的人的回答。如果出现更好的答案,请不要犹豫,改用更灵活或更短的解决方案。
  • 我同意。但是经过大量搜索,关于此类功能的示例/答案并不多。任何有更好解决方案的人都会非常有帮助。
  • 哦,如果你不知道的话——如果你觉得你的代码能更好地解决问题,我们同样鼓励你write and accept your own answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多