我有一个数据框,其中的列以2000-01,2000-02,2000-03等格式命名多年和几个月。我想用季度替换月份:
## q1 = -01,-02,-03
## q2 = -04, -05, -06
## q3 = -07, -08, -09
## q4 = -10, -11, -12
所需的结果是每个月以2000q1格式的列名。 这就是我做的。这导致了所需的输出,但似乎在所有12个月都非常繁琐。有没有人知道更有效的方法呢?
import re
df = df.rename(columns = {col: re.sub('01', 'q1', col) for col in df.columns})
df = df.rename(columns = {col: re.sub('02', 'q1', col) for col in df.columns})
......等等
谢谢, 去Deacs!
答案 0 :(得分:0)
从列名开始,如下所示:
df.columns
# Index([u'2000-01', u'2000-02', u'2000-03', u'2000-04', u'2000-05', u'2000-06',
# u'2000-07', u'2000-08', u'2000-09', u'2000-10', u'2000-11', u'2000-12'],
# dtype='object')
您可以执行以下操作(将列名拆分为年份和月份,并通过模数除法将月份转换为季度:
df.columns = [year + "q" + str((int(month) - 1) // 3 + 1) for year, month in df.columns.str.split("-")]
df.columns
# Index([u'2000q1', u'2000q1', u'2000q1', u'2000q2', u'2000q2', u'2000q2',
# u'2000q3', u'2000q3', u'2000q3', u'2000q4', u'2000q4', u'2000q4'],
# dtype='object')
或另一种选择:
df.columns = pd.to_datetime(df.columns).to_period("Q")
df.columns
# PeriodIndex(['2000Q1', '2000Q1', '2000Q1', '2000Q2', '2000Q2', '2000Q2',
# '2000Q3', '2000Q3', '2000Q3', '2000Q4', '2000Q4', '2000Q4'],
# dtype='period[Q-DEC]', freq='Q-DEC')