将日期转换为季度

时间:2018-05-22 03:23:02

标签: python pandas date

我想将我的日期列转换为该特定年份的季度指标,例如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

6 个答案:

答案 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,并由以下各项确定:

    {li> m // 41 <= m <= 3(Q1)为0 {li> m // 44 <= m <= 6(Q1)为1 {li> m // 47 <= m <= 9(Q1)为2 {li> m // 410 <= 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)

.date将不起作用,因为它是数据帧的函数。

df_q8['Date'] = pd.to_datetime(df_q8['Date'])
df_q8['quarter'] = pd.PeriodIndex(df_q8['Date'] ,freq='Q')

答案 5 :(得分:0)

Series.dt.to_period

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