【发布时间】:2017-06-06 04:40:17
【问题描述】:
下面的代码行采用代表每个月总销售额的列并按季度平均销售额。
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 函数使其正常工作。
【问题讨论】:
-
[1, 2, 3, 4][x.quarter==1]这只会返回1或2。x.quarter==1将始终计算为True或False,这将分别转换为列表的索引1或0。 -
@0x5453 好的,这是有道理的。有没有办法通过 1-4 计数,直到用完列?
-
x.quarter可以包含哪些值?如果它已经在 1-4 范围内格式化,那么您可以使用x.quarter。如果计数越来越多,您可能会使用[1, 2, 3, 4][x.quarter % 4]。没有看到任何示例数据很难说。 -
@0x5453 这几乎可以工作,它导致的唯一问题是它从 2000q2 开始。如何编码 [x.quarter % 4] 以从 [0] 打印 2000q1 开始。
-
@0x5453 aslo x 是 2000 年到 2016 年之间基本上每个月的日期时间列表