我有一个包含每月时间序列观测数据的数据集。
我想要做的是将日期时间转换为年/季度格式,然后提取第一个值DATE[0]
作为上一季度。例如2006-10-31属于2006年第四季度。但我想将其改为2006Q3。
为了提取后续值,我将使用每个季度的最后一个值。
因此,对于2006Q4,我将仅保留DATE[2]
的BBGN,SSD和QQ4567值。同样,对于2007Q1,我将仅保留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后
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]
中的值更改为始终为上一季度。所以,从2006Q4到2006Q3。此外,如果DATE[0]
是2007Q1,这将如何工作,我可以将其更改为2006Q4吗?
答案 0 :(得分:1)
我的建议是在过去的3个月内创建一个新的DATE
列。喜欢这个
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
然后,您可以执行与上述Last_quarter
答案 1 :(得分:1)
这是pivot_table
方法
# 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