在python中将年/季度日期格式更改为上一个期间
我有一个数据集,其中包含一个时间序列的每月观测值。 我要做的是将datetime转换为年/季度格式,然后将第一个值在python中将年/季度日期格式更改为上一个期间,python,pandas,date,Python,Pandas,Date,我有一个数据集,其中包含一个时间序列的每月观测值。 我要做的是将datetime转换为年/季度格式,然后将第一个值DATE[0]提取为上一个季度。例如,2006-10-31属于2006年第四季度。但我想把它改成2006Q3。 对于后续值的提取,我将只使用每个季度的最后一个值。 因此,对于2006年第4季度,我将只保留日期[2]中的BBGN、SSD和QQ4567值。同样,对于2007年第一季度,我将只保留DATE[5]值,以此类推 原始数据集: DATE
DATE[0]
提取为上一个季度。例如,2006-10-31属于2006年第四季度。但我想把它改成2006Q3。
对于后续值的提取,我将只使用每个季度的最后一个值。
因此,对于2006年第4季度,我将只保留日期[2]
中的BBGN、SSD和QQ4567值。同样,对于2007年第一季度,我将只保留DATE[5]
值,以此类推
原始数据集:
DATE BBGN SSD QQ4567
0 2006-10-31 00:00:00 1.210 22.022 9726.550
1 2006-11-30 00:00:00 1.270 22.060 9891.008
2 2006-12-31 00:00:00 1.300 22.080 10055.466
3 2007-01-31 00:00:00 1.330 22.099 10219.924
4 2007-02-28 00:00:00 1.393 22.110 10350.406
5 2007-03-31 00:00:00 1.440 22.125 10480.888
在处理日期之后
DATE BBGN SSD QQ4567
0 2006Q3 1.210 22.022 9726.550
2 2006Q4 1.300 22.080 10055.466
5 2007Q1 1.440 22.125 10480.888
到目前为止,我采取的步骤是:
将值从yyyy-mm-dd-hh格式转换为yyyyQQ格式
DF['DATE'] = pd.to_datetime(DF['DATE']).dt.to_period('Q')
我明白了
DATE BBGN SSD QQ4567
0 2006Q4 1.210 22.022 9726.550
1 2006Q4 1.270 22.060 9891.008
2 2006Q4 1.300 22.080 10055.466
3 2007Q1 1.330 22.099 10219.924
4 2007Q1 1.393 22.110 10350.406
5 2007Q1 1.440 22.125 10480.888
下一步是从每个季度提取最后的值。但是因为我总是想保留第一行,所以我将从函数中排除DATE[0]
quarterDF = DF.iloc[1:,].drop_duplicates(subset='DATE', keep='last')
现在,我的问题是如何将
DATE[0]
中的值更改为始终为上一季度的值。所以,从2006年第四季度到2006年第三季度。另外,如果日期[0]
是2007年第一季度,我可以将其更改为2006年第四季度吗?我的建议是创建一个新的日期列,其中日期为过去3个月的日期。像这样
import pandas as pd
df = pd.DataFrame()
df['Date'] = pd.to_datetime(['2006-10-31', '2007-01-31'])
one_quarter = pd.tseries.offsets.DateOffset(months=3)
df['Last_quarter'] = df.Date - one_quarter
这会给你
Date Last_quarter
0 2006-10-31 2006-07-31
1 2007-01-31 2006-10-31
然后,您可以执行与上一季度所述相同的过程,这里是一个透视表方法
# Subtract the quarter from date save it in a column
df['Q'] = df['DATE'] - pd.tseries.offsets.QuarterEnd()
#0 2006-09-30
#1 2006-09-30
#2 2006-09-30
#3 2006-12-31
#4 2006-12-31
#5 2006-12-31
#Name: Q, dtype: datetime64[ns]
# Drop and pivot for not including the columns
ndf = df.drop(['DATE','Q'],1).pivot_table(index=pd.to_datetime(df['Q']).dt.to_period('Q'),aggfunc='last')
BBGN QQ4567 SSD
Qdate
2006Q3 1.30 10055.466 22.080
2006Q4 1.44 10480.888 22.125
如果我读对了,你想按季度报告,但显示每个季度与前一季度一样,对吗?我觉得(我可能错了)这会很困难,因为你有点违背了熊猫所理解的四分之一。嗨,格雷格,实际上我只需要在第一排做这件事。因此,如果第一行属于2017Q1,我想将其更改为2016Q4。但只限于第一排。我创建了一个表作为输出,以可视化我想要实现的目标。