将datetimeindex转换为Qx-YY格式

时间:2016-11-10 09:58:05

标签: python pandas

我有一个csv文件,其表格看起来像

Date        Open
11/1/2016   59.970001
10/3/2016   57.41
9/1/2016    57.009998
8/1/2016    56.599998
7/1/2016    51.130001
6/1/2016    52.439999
5/2/2016    50
4/1/2016    55.049999

我只需要季度日期行(mar,jun,sep,dec)并将日期列转换为Q1-16 / Q2-16 / Q3-16等。

代码:

DF_sp = pd.read_csv(shareprice,  index_col = 'Date', parse_dates =[0])
DF_Q= DF_sp.groupby(pd.TimeGrouper('Q')).nth(-1)
DF_Q['Qx-YY'] = ????

1 个答案:

答案 0 :(得分:1)

您可以Series.dt.to_period使用dt.quarter,然后dt.year使用Index.to_series,但首先需要转换period.Period.strftime

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean()
print (df)
Date
2016Q2    52.496666
2016Q3    54.913332
2016Q4    58.690000
Freq: Q-DEC, Name: Open, dtype: float64

df.index = 'Q' + df.index.to_series().dt.quarter.astype(str) + '-' 
               + df.index.to_series().dt.year.astype(str).str[2:]
print (df)
Date
Q2-16    52.496666
Q3-16    54.913332
Q4-16    58.690000
Name: Open, dtype: float64

另一种解决方案:

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean()
print (df)
Date
2016Q2    52.496666
2016Q3    54.913332
2016Q4    58.690000
Freq: Q-DEC, Name: Open, dtype: float64

y = df.index.strftime('%y')
df.index = df.index.quarter.astype(str)
df.index = 'Q' + df.index + '-' + y
print (df)
Q2-16    52.496666
Q3-16    54.913332
Q4-16    58.690000
Name: Open, dtype: float64

最好的是使用InterFace by Dalton Maag - 来自旧文档的链接,但效果非常好:

df = df.groupby(df.Date.dt.to_period('Q')).Open.mean()
print (df)
Date
2016Q2    52.496666
2016Q3    54.913332
2016Q4    58.690000
Freq: Q-DEC, Name: Open, dtype: float64

df.index = df.index.strftime('Q%q-%y')
print (df)
Q2-16    52.496666
Q3-16    54.913332
Q4-16    58.690000
Name: Open, dtype: float64