看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在时间序列数据分析中,我们经常需要按不同的时间周期(如季度、月度、周度)进行数据聚合和分析。pandas 提供了强大的 PeriodIndex 功能,专门用于处理这种基于周期的时间数据。通过本案例,你将学习如何使用 PeriodIndex 将时间戳数据转换为周期数据,并进行高效的周期级聚合分析,这对于财务报告、销售趋势分析等场景特别有用。
假设我们有一份零售商店的每日销售数据,包含销售日期和销售额。我们需要分析2023年每个季度的销售表现,并计算季度的环比增长率。
原始数据如下:
import pandas as pd
import numpy as np
from io import StringIO
data = """
date,amount
2023-01-05,1500
2023-01-12,2000
2023-01-18,1200
2023-02-03,3000
2023-02-14,1800
2023-02-22,2800
2023-03-05,2500
2023-03-10,1700
2023-03-15,1900
2023-03-20,2100
2023-03-25,2400
2023-04-02,2200
2023-04-10,2600
2023-04-18,3100
2023-05-03,2900
2023-05-15,3300
2023-05-22,2700
2023-06-05,3500
2023-06-12,3800
2023-06-20,4200
2023-07-08,3900
2023-07-16,4100
2023-07-25,3700
2023-08-03,4300
2023-08-11,4500
2023-08-19,4800
2023-09-05,5200
2023-09-14,5500
2023-09-22,5100
2023-10-04,4900
2023-10-12,5300
2023-10-20,5700
2023-11-03,6100
2023-11-11,5900
2023-11-19,6300
2023-12-05,6700
2023-12-13,7100
2023-12-21,6900
"""
df = pd.read_csv(StringIO(data))
df['date'] = pd.to_datetime(df['date'])
df
# ...
期望输出每个季度的总销售额,以及相对于前一个季度的环比增长率。
解决这个需求需要以下几个步骤:
代码如下:
# 使用链式方法一次性完成所有操作
(
df
# 创建季度周期索引
.assign(quarter=lambda x: pd.PeriodIndex(x['date'], freq='Q'))
# 按季度分组并计算总销售额
.groupby('quarter')
.agg(quarterly_sales=('amount', 'sum'))
# 计算环比增长率
.assign(qoq_growth=lambda x: x['quarterly_sales'].pct_change() * 100)
# 格式化增长率显示为百分比
.assign(qoq_growth=lambda x: x['qoq_growth'].round(2))
# 重置索引使季度成为一列
.reset_index()
# 重命名列
.rename(columns={'quarter': '季度',
'quarterly_sales': '季度销售额',
'qoq_growth': '环比增长(%)'})
)
'''
季度 季度销售额 环比增长(%)
0 2023Q1 22900 NaN
1 2023Q2 28300 23.58
2 2023Q3 41100 45.23
3 2023Q4 54900 33.58
'''
代码分析:
assign()
和 pd.PeriodIndex()
将日期转换为季度周期数据,freq='Q' 表示季度频率groupby()
按季度分组并计算每个季度的销售总额pct_change()
方法计算环比增长率,并转换为百分比形式round()
方法保留两位小数,使数据显示更整洁这种方法展示了 PeriodIndex 在处理周期数据时的强大功能,特别适合财务季度报告、季节性趋势分析等场景。通过将时间戳转换为周期数据,我们可以更自然地进行周期级的聚合和分析。
(完)
更新时间:2025-09-12 12:23:11 标签:pandas python 周期索引 季度