看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析工作中,时间序列分析是最常见的任务之一。无论是销售趋势、网站访问量、气温变化,还是用户活跃度,我们都需要理解数据随时间的变化规律。
pandas 在时间序列处理上非常强大,尤其是以下三个方法的组合:
resample() —— 按时间频率(如天、周、月)重采样数据rolling() —— 创建滑动窗口计算mean() —— 在窗口上求平均,得到平滑趋势线通过本篇,你将学会如何用几行 pandas 代码,将“每日销售明细”转化为一个漂亮的销售趋势分析。
我们有一份每日销售记录,包含日期和销售额。
下面是样例数据(以字符串形式读取):
import pandas as pd
from io import StringIO
data = StringIO("""
date,sales
2024-11-01,120
2024-11-02,150
2024-11-03,130
2024-11-04,170
2024-11-05,160
2024-11-06,180
2024-11-07,90
2024-11-08,200
2024-11-09,210
2024-11-10,190
2024-11-11,230
2024-11-12,250
2024-11-13,240
2024-11-14,260
""")
df = pd.read_csv(data, parse_dates=['date'])
需求描述:
我们希望通过时间序列分析得到:
最终结果应展示出:
确保时间序列索引:
将 date 列设置为索引,方便时间重采样。
使用 resample('W') 按周汇总销售额:
用于分析周度变化趋势。
使用 rolling(3).mean() 计算 3 日移动平均:
平滑日销售波动,让趋势更清晰。
可选可视化:
使用 matplotlib 绘制原始趋势 + 平滑趋势对比。
代码如下:
import matplotlib.pyplot as plt
# 设置时间索引
df = df.set_index('date').sort_index()
# 计算3日移动平均
df['rolling_mean'] = df['sales'].rolling(3, min_periods=1).mean()
# 按周汇总
weekly_sales = df['sales'].resample('W').sum().reset_index()
# 输出结果
print("=== 日销售数据与3日移动平均 ===")
print(df.head(10))
print("\n=== 周度销售汇总 ===")
print(weekly_sales)
# 可视化趋势
plt.figure(figsize=(10,5))
plt.plot(df.index, df['sales'], label='Daily Sales', marker='o')
plt.plot(df.index, df['rolling_mean'], label='3-Day Moving Avg', linewidth=2)
plt.title('Sales Trend with 3-Day Moving Average')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
输出结果(示例):
=== 日销售数据与3日移动平均 ===
sales rolling_mean
date
2024-11-01 120 120.000000
2024-11-02 150 135.000000
2024-11-03 130 133.333333
2024-11-04 170 150.000000
2024-11-05 160 153.333333
...
=== 周度销售汇总 ===
date sales
0 2024-11-03 400
1 2024-11-10 1200
2 2024-11-17 990
输出图形:

代码分析:
.set_index('date'):让日期成为时间索引。.rolling(3).mean():创建一个长度为 3 的滑动窗口,计算均值。.resample('W').sum():按周重采样并求和,常用于周期性报表。matplotlib:简单可视化,直观展示平滑趋势。通过这种组合,我们可以快速得到短期波动与长期趋势并存的视图,是时间序列分析中最常用的套路之一。
应用场景:
(完)
更新时间:2025-11-10 19:23:02 标签:pandas python 平均趋势 绘制