【问题标题】:How do I divide a date range into years in python?如何在 python 中将日期范围划分为年份?
【发布时间】:2021-11-17 21:40:31
【问题描述】:

我有一个这样的数据框:

id start end
a1 2018-03-04 2020-03-03
b1 2019-01-24 2021-05-08

我想要这样的输出:

id start end
a1 2018-03-04 2019-03-03
a1 2019-03-04 2020-03-03
b1 2019-01-24 2020-01-23
b1 2020-01-24 2021-01-23
b1 2021-01-24 2021-05-08

谢谢!

【问题讨论】:

  • 欢迎来到Stack Overflow. 请注意这不是代码编写或辅导服务。我们可以帮助解决具体的技术问题,而不是对代码或建议的开放式请求。请编辑您的问题以显示您到目前为止所做的尝试。请参阅How To Ask a Good Question 页面,详细了解如何最好地帮助我们。
  • 您或许可以使用pd.date_range()

标签: python pandas dataframe date


【解决方案1】:

试试这个:

def split_date_range(row):
    start, end = row[['start', 'end']]
    dates = []

    s = start
    while True:
        e = s + pd.DateOffset(years=1) - pd.Timedelta(days=1)
        if e < end:
            dates.append((s, e))
            s = e + pd.Timedelta(days=1)
        else:
            dates.append((s, end))
            break
    return dates

tmp = df.set_index('id').apply(split_date_range, axis=1).explode()
result = pd.DataFrame([ 
    [id_, *timerange] for id_, timerange in tmp.iteritems()
], columns=['id', 'start', 'end'])

代码使用id_来避免与id()内置函数发生冲突。

【讨论】:

  • 谢谢!这个解决方案效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多