【问题标题】:How to get 'Q' at the beginning of every quarter如何在每个季度开始时获得'Q'
【发布时间】:2020-08-11 10:50:06
【问题描述】:

我确实有下面的代码,它给了我日期列中的季度并且工作正常。

代码

order['Qtr'] = pd.to_datetime(order['Order Date']).dt.quarter

输出

我的要求是我想在每个季度的开头添加 Q ,列名称为 Quarter 。我想要如下的输出。

所需输出

问候,

Bharath Vikas

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    第一个想法是将值转换为字符串并在前面加上Q

    order['Quarter'] = 'Q' + pd.to_datetime(order['Order Date']).dt.quarter.astype(str)
    

    或者将值转换为季度,然后使用strftime

    rng = pd.date_range('2017-04-03', periods=10, freq='170D')
    order = pd.DataFrame({'Order Date': rng})  
    
    order['Quarter'] = pd.to_datetime(order['Order Date']).dt.to_period('q').dt.strftime('Q%q')
    print (order)
      Order Date Quarter
    0 2017-04-03      Q2
    1 2017-09-20      Q3
    2 2018-03-09      Q1
    3 2018-08-26      Q3
    4 2019-02-12      Q1
    5 2019-08-01      Q3
    6 2020-01-18      Q1
    7 2020-07-06      Q3
    8 2020-12-23      Q4
    9 2021-06-11      Q2
    

    【讨论】:

    • 谢谢,如何将这个新季度列的列名称命名为 Quarter
    • @Vikas - 答案已编辑,使用 order['Quarter'] 代替 order['Qtr']
    【解决方案2】:

    我的解决方案如下:

    order['Quarter'] = "Q" + order["Qtr"].astype("str")
    

    这基本上将您的数值转换为字符串并将它们与前面的Q 连接起来。

    或者,您可以像这样映射任意转换函数:

    order['Qtr'] = pd.to_datetime(order['Order Date']).dt.quarter
    order['Quarter'] = df.map(lambda q: f"Q{q}")
    

    请注意,这使用了我认为需要 python 3.6+ 的 F 字符串

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-10
      • 2021-12-29
      • 2017-01-16
      • 1970-01-01
      • 2016-12-31
      • 2023-01-30
      • 1970-01-01
      • 2018-12-28
      相关资源
      最近更新 更多