您可以使用Series.dt.to_period
,然後用dt.year
dt.quarter
,但首先需要轉換Index.to_series
:
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
最好是使用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 = df.index.strftime('Q%q-%y')
print (df)
Q2-16 52.496666
Q3-16 54.913332
Q4-16 58.690000
Name: Open, dtype: float64
這不是地道的;如果你真的需要將它格式化爲一個字符串(根本不推薦),請使用.strftime和Period索引 – Jeff
@Jeff - 但是如何在strftime中獲得季度?我找不到解決方案。 – jezrael
http://pandas.pydata.org/pandas-docs/stable/timeseries.html#time-span-representation – Jeff