【问题标题】:How to create 3 months buckets in time series data with python如何使用 python 在时间序列数据中创建 3 个月的存储桶
【发布时间】:2020-08-12 10:20:24
【问题描述】:

我有每日时间序列数据作为日期(YYYY-MM-dd)和数量:

Date        Quantity
2017-10-31      5
2017-11-12      4
2017-11-13      7
2017-11-18      10
2017-12-03      28
2017-12-16      19
2018-01-03      24
2018-01-19      5
2018-02-02      1
2018-03-22      56
2018-04-12      12

我想为日期列创建 3 个月的存储桶。 3M 列日期名称可以更改。在下表中,它代表 2017 年的 10 到 12 个月。

Date        Quantity    3M
2017-10-31      5       2017-10-12
2017-11-12      4       2017-10-12
2017-11-13      7       2017-10-12
2017-11-18      10      2017-10-12
2017-12-03      28      2017-10-12
2017-12-16      19      2017-10-12
2018-01-03      24      2018-01-03
2018-01-19      5       2018-01-03
2018-02-02      1       2018-01-03
2018-03-22      56      2018-01-03
2018-04-12      12      2018-04-06

我该怎么做?

最后,我将按 3M 列和 Quantity 列的总和进行分组,所以如果有直接的方法可以做到这一点,那就太好了。

任何评论都会有所帮助 谢谢,

【问题讨论】:

  • 你在寻找一个季度的 groupby 吗?也许这有帮助:stackoverflow.com/questions/49949300/…
  • 实际上我正在寻找如何创建自定义日期范围。可以是 3 个月、5 个月、9 个月等,不需要每季度。

标签: python date time-series python-datetime


【解决方案1】:

从 Pandas v0.20.1(2017 年 5 月 5 日)开始,pd.cut 支持 datetime64 dtype。

from random import randrange
from datetime import timedelta, date
import numpy as np
import pandas as pd

def random_date(start, end):
    delta = end - start
    int_delta = (delta.days * 24 * 60 * 60) + delta.seconds
    random_second = randrange(int_delta)
    return start + timedelta(seconds=random_second)

start = date(2010, 1, 1)
end = date(2020, 1, 1)
df = pd.DataFrame({"dates": [np.datetime64(random_date(start, end)) for _ in range(20)]})
df
bins = pd.date_range(start, end, freq='3MS')

df["bins"] = pd.cut(df.dates, bins=bins)
df

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2023-04-01
    • 2021-10-29
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多