import numpy as np
import pandas as pd
index = pd.date_range('2013-01-01', freq='M', periods=12)
s = pd.Series(np.random.rand(12), index=index)
print(s)
# 2013-01-31 0.820672
# 2013-02-28 0.994890
# 2013-03-31 0.928376
# 2013-04-30 0.848532
# 2013-05-31 0.122263
# 2013-06-30 0.305741
# 2013-07-31 0.088432
# 2013-08-31 0.647288
# 2013-09-30 0.640308
# 2013-10-31 0.737139
# 2013-11-30 0.233656
# 2013-12-31 0.245214
# Freq: M, dtype: float64
d = pd.Series(s.index, index=s.index)
quarter = d.dt.quarter.astype(str) + 'Q' + d.dt.year.astype(str)
print(quarter)
# 2013-01-31 1Q2013
# 2013-02-28 1Q2013
# 2013-03-31 1Q2013
# 2013-04-30 2Q2013
# 2013-05-31 2Q2013
# 2013-06-30 2Q2013
# 2013-07-31 3Q2013
# 2013-08-31 3Q2013
# 2013-09-30 3Q2013
# 2013-10-31 4Q2013
# 2013-11-30 4Q2013
# 2013-12-31 4Q2013
# Freq: M, dtype: object
print(s[quarter == '1Q2013'])
# 2013-01-31 0.124398
# 2013-02-28 0.052828
# 2013-03-31 0.126374
# Freq: M, dtype: float64
如果您不想创建一个每个季度都带有标签的新系列(例如,如果您只进行一次子集化),甚至可以
print(s[(s.index.quarter == 1) & (s.index.year == 2013)])
# 2013-01-31 0.124398
# 2013-02-28 0.052828
# 2013-03-31 0.126374
# Freq: M, dtype: float64