如何将表示为间隔的日期更改为常规%Y-%M-%D格式。
我最初有一个df,看起来像这样:
Id Date Quantity
1000A 2018-03-22 20.0
1000A 2018-03-29 8.0
1000A 2018-03-27 4.0
1000A 2018-03-28 10.0
或:
all_data = pd.DataFrame({'Id': ['1000A','1000A','1000A','1000A'], 'Date': ['2018-03-28', '2018-04-12', '2018-05-02', '2018-06-28'], 'Quantity' : [20.0, 8.0, 4.0, 10.0]})
all_data.Date = pd.to_datetime(all_data.Date)
我在上面应用了一些东西,从今天的日期开始,基本上得到了每月分组的日期。
today1 = pd.to_datetime('today').normalize()
frequency1 = '30D'
Nbin1 = (today1 - all_data['Date'].min()) // pd.Timedelta(frequency1) + 1 # Number of bins
bins1 = [today1 - n * pd.Timedelta(frequency1) for n in range(Nbin1, -1, -1)]
data11 = all_data.groupby(['Id', pd.cut(all_data['Date'], bins=bins1)]).sum().fillna(0).reset_index()
输出如下:
Id Date Quantity
0 1000A (2018-03-02, 2018-04-01] 20.0
1 1000A (2018-04-01, 2018-05-01] 8.0
2 1000A (2018-05-01, 2018-05-31] 4.0
3 1000A (2018-05-31, 2018-06-30] 10.0
....
n. 1000A (2020-11-16, 2020-12-16] 0.0
我找不到一种方法将日期列转换回像这样的常规日期格式:
Date
2018-04-01
2018-05-01
2018-05-31
2018-06-30
我觉得我已经试过了我能找到的每一个工具,但没有任何工具可以帮助我,任何帮助都将不胜感激。
您在Date
中有一个分类数据类型。处理它的一种方法是将其转换为str
,这样您就可以提取所需的模式,然后将其转换成datetime
:
data11['Date'] = data11.Date.astype(str).str.extract(', (.+?)]').astype('datetime64[ns]')