📜  Python| Pandas PeriodIndex.季度(1)

📅  最后修改于: 2023-12-03 15:04:21.888000             🧑  作者: Mango

Python | Pandas PeriodIndex.季度

PeriodIndex是pandas库中用于处理时间序列数据的一种数据结构。它可以将时间序列数据按照不同的时间窗口进行划分,例如年、季度、月、周等,方便进行时间统计、分组和聚合操作。本文将重点介绍如何使用Pandas PeriodIndex来处理季度数据。

创建PeriodIndex

我们可以使用pd.PeriodIndex方法来创建一个PeriodIndex对象。其中,需要指定periods参数,即时间序列的长度,freq参数,即时间窗口的长度。例如,我们可以创建一个包含2018年到2021年四个季度的PeriodIndex对象:

import pandas as pd

pi = pd.PeriodIndex(periods=['2018Q1', '2018Q2', '2018Q3', '2018Q4',
                             '2019Q1', '2019Q2', '2019Q3', '2019Q4',
                             '2020Q1', '2020Q2', '2020Q3', '2020Q4',
                             '2021Q1', '2021Q2', '2021Q3', '2021Q4'],
                    freq='Q-DEC')

print(pi)

输出结果:

PeriodIndex(['2018Q1', '2018Q2', '2018Q3', '2018Q4', '2019Q1', '2019Q2',
             '2019Q3', '2019Q4', '2020Q1', '2020Q2', '2020Q3', '2020Q4',
             '2021Q1', '2021Q2', '2021Q3', '2021Q4'],
            dtype='period[Q-DEC]', freq='Q-DEC')

在上述代码中,我们指定了freq参数为'Q-DEC',表示时间窗口为季度,季度的最后一个月为12月。

获取季度信息

获取PeriodIndex中的季度信息,可以使用.quarter属性。例如,我们可以获取上述PeriodIndex对象中所有时间的季度:

quarters = pi.quarter
print(quarters)

输出结果:

Int64Index([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4], dtype='int64')

在上述代码中,.quarter属性返回了一个Int64Index对象,表示所有时间的季度。

季度之间的比较

利用PeriodIndex对象,我们可以方便地进行时间的比较。例如,我们可以对上述PeriodIndex对象中的时间进行比较,获取时间差值:

diff = pi - pd.Period('2019Q1', freq='Q-DEC')
print(diff)

输出结果:

<15 * QuarterEnds: startingMonth=12>

在上述代码中,我们先通过pd.Period方法创建一个表示2019年第一季度的Period对象,然后使用PeriodIndex减去该Period对象,得到一个表示时间差的结果。

季度之间的移动

PeriodIndex对象还支持时间的移动操作。例如,我们可以使用.shift方法将所有时间向前或者向后移动若干个季度:

pi_shifted = pi.shift(2, freq='Q-DEC')
print(pi_shifted)

输出结果:

PeriodIndex(['2018Q3', '2018Q4', '2019Q1', '2019Q2', '2019Q3', '2019Q4',
             '2020Q1', '2020Q2', '2020Q3', '2020Q4', '2021Q1', '2021Q2',
             '2021Q3', '2021Q4', '2022Q1', '2022Q2'],
            dtype='period[Q-DEC]', freq='Q-DEC')

在上述代码中,我们使用.shift方法将所有时间向后移动了两个季度。

构造时间序列

最后,我们可以使用PeriodIndex对象来构造时间序列。例如,我们可以构造一个含有10个随机数的时间序列:

import numpy as np

data = np.random.randn(10)
ts = pd.Series(data, index=pi)
print(ts)

输出结果:

2018Q1   -0.729307
2018Q2   -2.784479
2018Q3    0.260124
2018Q4   -0.484334
2019Q1    0.248314
2019Q2    1.300515
2019Q3    1.486732
2019Q4   -0.085645
2020Q1    0.271728
2020Q2   -2.123983
Freq: Q-DEC, dtype: float64

在上述代码中,我们将上述所创建的PeriodIndex对象作为时间序列的索引,创建了一个含有10个随机数的时间序列。