我想将我的日期列转换为该特定年份的季度指标,例如2018q1或2018q2等。
我的数据看起来像这样,我每季度有一次股票回报(这里没有显示返回列),而且相应的日期,列季度是我想得到的(或类似的东西)
data = [{'date': '3/22/18', 'quarter': 1},{'date': '3/22/18', 'quarter': 1},
{'date': '6/22/18', 'quarter': 3},{'date': '6/22/18', 'quarter': 3},
{'date': '9/22/18', 'quarter': 2},{'date': '9/22/18', 'quarter': 2}]
df = pd.DataFrame(data, index=['s1', 's2','s1','s2','s1','s2'])
date quarter
s1 3/22/13 2013q1
s2 3/24/13 2013q1
s1 6/21/13 2013q2
s2 6/26/13 2013q2
s1 9/21/13 2013q3
s2 9/28/13 2013q3
答案 0 :(得分:5)
<强> to_datetime
强>:
df.date = pd.to_datetime(df.date)
<强> PeriodIndex
强>
df['quarter'] = pd.PeriodIndex(df.date, freq='Q')
date quarter
s1 2018-03-22 2018Q1
s2 2018-03-22 2018Q1
s1 2018-06-22 2018Q2
s2 2018-06-22 2018Q2
s1 2018-09-22 2018Q3
s2 2018-09-22 2018Q3
答案 1 :(得分:2)
只需提取日期字符串的月份部分即可。可以通过month // 4 + 1
简单地获得该季度。
由于您的数据是'date'
密钥为str
格式为(\d{1:2})/(\d{1:2})/(\d\d)
的字典,因此您可以获取日期的“月份”部分(第一组),将其转换为到一个int,并使用month // 4 + 1
来获得该季度。
可以使用正则表达式甚至简单的字符串切片来提取日期字符串的月份部分。因此,该季度的范围为1至4,并由以下各项确定:
m // 4
为1 <= m <= 3
(Q1)为0
{li> m // 4
对4 <= m <= 6
(Q1)为1
{li> m // 4
为7 <= m <= 9
(Q1)为2
{li> m // 4
为10 <= m <= 12
(Q1)为3
答案 2 :(得分:2)
Pandas 有一个方法可以帮助你,它叫做 pd.PeriodIndex(monthcolumn, freq='Q')。您可能需要先使用 datetime 库将月列转换为数据类型。
Pandas 也有一个名为 'to_date' 的方法,您可以使用它来将列转换为日期列。
例如:
df["year"] = pd.to_date(df["year"])
答案 3 :(得分:1)
datecolumn.dt.quarter
功能会有所帮助。
df.date = pd.to_datetime(df.date)
df["Quarter"] = df.date.dt.quarter
答案 4 :(得分:0)
df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')
答案 5 :(得分:0)
import pandas as pd
df['date'] = pd.to_datetime(df['date'])
df['quarter'] = df['date'].dt.to_period('Q')
date quarter
s1 2018-03-22 2018Q1
s2 2018-03-22 2018Q1
s1 2018-06-22 2018Q2
s2 2018-06-22 2018Q2
s1 2018-09-22 2018Q3
s2 2018-09-22 2018Q3