2017-06-05 59 views
-1

下面的代码行采用的列代表每个月的总销售额并按季度平均销售额。使用格式化功能命名列

mdf = tdf[sel_cols].resample('3M',axis=1).mean() 

我需要做的是用str命名列(不能使用pandas .Period函数)。

我试图使用下面的代码,但我无法让它工作。

mdf = tdf[sel_cols].resample('3M',axis=1).mean().rename(columns=lambda x: '{:}q{:}'.format(x.year, [1, 2, 3, 4][x.quarter==1])) 

我想要的列读... 2000q1,2000q2,2000q3,2000q4,2001q1,...等,但不断收到错误的东西像2000q1,2000q1,2000q1,2000q2,2001q1。

如何使用.format函数使其正常工作。

+2

日期时间列表上执行季度函数'[1,2,3,4] [x.quarter == 1]'这仅会返回' 1'或'2'。 'x.quarter == 1'将始终评估为'True'或'False',它们分别转换为列表的索引'1'或'0'。 – 0x5453

+0

@ 0x5453好的,这是有道理的。无论如何要做到这一点,通过1-4,直到列用完为止? –

+0

'x.quarter'包含什么值?如果它已经在1-4范围内格式化,那么你可以使用'x.quarter'。如果这是一个越来越多的计数,你可能会做'[1,2,3,4] [x.quarter%4]'。没有看到任何示例数据很难说。 – 0x5453

回答

0

最简单的方法是,像这样

mdf = tdf[sel_cols].resample('3M',axis=1).mean().rename(columns=lambda x: '{:}q{:}'.format(x.year,x.quarter))