替换pandas数据帧中的部分列名称

时间:2016-12-11 05:21:33

标签: python pandas

我有一个数据框,其中的列以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!

1 个答案:

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