【问题标题】:Using the format function to name columns [duplicate]使用格式函数命名列[重复]
【发布时间】: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] 这只会返回12x.quarter==1 将始终计算为 TrueFalse,这将分别转换为列表的索引 10
  • @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 年之间基本上每个月的日期时间列表

标签: python pandas numpy


【解决方案1】:

最简单的方法是像这样在日期时间列表上执行季度函数

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2021-11-03
    • 2014-08-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多