将年/季度日期格式更改为python

时间:2017-12-04 12:31:51

标签: python pandas date

我有一个包含每月时间序列观测数据的数据集。 我想要做的是将日期时间转换为年/季度格式,然后提取第一个值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吗?

2 个答案:

答案 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