如何使用 python 在时间序列数据中创建 3 个月的存储桶
How to create 3 months buckets in time series data with python
我有日期 (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 列日期名称。下面table代表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 列的总和进行分组,因此,如果有直接的方法可以做到这一点,那就太好了。
任何评论都会有帮助
谢谢,
自 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
我有日期 (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 列日期名称。下面table代表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 列的总和进行分组,因此,如果有直接的方法可以做到这一点,那就太好了。
任何评论都会有帮助 谢谢,
自 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