如何从日期时间推断出季度?

时间:2017-11-20 17:36:47

标签: python pandas

我有一些日期,我试图推断该季度。我粗暴地强迫解决方案,但我希望能够计算从日期开始的季度,以确保数据的完整性。

第一行将始终是一个季度的最后一天,并且是第0季度。在此之后,季度应该在递增之前重复三次。例如,0,1,1,1,2,2,2。

我已经附上了下面的蛮力解决方案,但有没有人知道实现这一目标的优雅解决方案?或者知道我可以应用的日期时间公式,以使用开始/当前日期来解析为四分之一数字?

quarters = [0]
for n in xrange(1, len(date_range)):
    for i in xrange(3):
        quarters.append(n)
quarters = quarters[:len(date_range)]

launchpoint_date = pd.to_datetime('2017-03-31')
date_range = pd.DataFrame({'Date': [pd.to_datetime('2017-03-31'),
                                     pd.to_datetime('2017-04-30'),
                                     pd.to_datetime('2017-05-31'),
                                     pd.to_datetime('2017-06-30'),
                                     pd.to_datetime('2017-07-31'),
                                     pd.to_datetime('2017-08-31'),
                                     pd.to_datetime('2017-09-30'),
                                     pd.to_datetime('2017-10-31'),
                                     pd.to_datetime('2017-11-30'),
                                     pd.to_datetime('2017-12-31'),
                                     pd.to_datetime('2018-01-31'),
                                     pd.to_datetime('2018-02-28'),
                                     pd.to_datetime('2018-03-31'),
                                     pd.to_datetime('2018-04-30'),
                                     pd.to_datetime('2018-05-31'),
                                     pd.to_datetime('2018-06-30'),
                                     pd.to_datetime('2018-07-31'),
                                     pd.to_datetime('2018-08-31')],
                          'Month': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]})

launchpoint_date = launchpoint_date.month
date_range['Quarter'] = quarters

date_range

2 个答案:

答案 0 :(得分:2)

您可以pd.Grouperfrequency quarterngroup使用

date_range['new'] = date_range.groupby([pd.Grouper(key='Date',freq='q')]).ngroup()

输出:

         Date  Month  Quarter  new
0  2017-03-31      0        0    0
1  2017-04-30      1        1    1
2  2017-05-31      2        1    1
3  2017-06-30      3        1    1
4  2017-07-31      4        2    2
5  2017-08-31      5        2    2
6  2017-09-30      6        2    2
7  2017-10-31      7        3    3
8  2017-11-30      8        3    3
9  2017-12-31      9        3    3
10 2018-01-31     10        4    4
11 2018-02-28     11        4    4
12 2018-03-31     12        4    4
13 2018-04-30     13        5    5
14 2018-05-31     14        5    5
15 2018-06-30     15        5    5
16 2018-07-31     16        6    6
17 2018-08-31     17        6    6

答案 1 :(得分:2)

使用日期时间访问器.dt,您可以提取任何单个元素:年,周,小时等。

( ( date_range['Date'].dt.quarter -    1 ) +
  ( date_range['Date'].dt.year    - 2017 ) * 4 )

结果:

0     0
1     1
2     1
3     1
4     2
5     2
6     2
7     3
8     3
9     3
10    4
11    4
12    4
13    5
14    5
15    5
16    6
17    6