【发布时间】: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
我确实有下面的代码,它给了我日期列中的季度并且工作正常。
代码
order['Qtr'] = pd.to_datetime(order['Order Date']).dt.quarter
输出
我的要求是我想在每个季度的开头添加 Q ,列名称为 Quarter 。我想要如下的输出。
所需输出
问候,
Bharath Vikas
【问题讨论】:
标签: python python-3.x pandas numpy
第一个想法是将值转换为字符串并在前面加上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
【讨论】:
order['Quarter'] 代替 order['Qtr']
我的解决方案如下:
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 字符串
【讨论】: