pandas:将日期间隔转换为常规日期



如何将表示为间隔的日期更改为常规%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]')

最新更新