- Python Pandas 教程
- Python Pandas - 首页
- Python Pandas - 简介
- Python Pandas - 环境搭建
- Python Pandas - 基础
- Python Pandas - 数据结构简介
- Python Pandas - 索引对象
- Python Pandas - Panel (面板)
- Python Pandas - 基本功能
- Python Pandas - 索引与数据选择
- Python Pandas - Series (序列)
- Python Pandas - Series (序列)
- Python Pandas - Series 对象切片
- Python Pandas - Series 对象的属性
- Python Pandas - Series 对象的算术运算
- Python Pandas - 将 Series 转换为其他对象
- Python Pandas - DataFrame (数据框)
- Python Pandas - DataFrame (数据框)
- Python Pandas - 访问 DataFrame
- Python Pandas - DataFrame 对象切片
- Python Pandas - 修改 DataFrame
- Python Pandas - 从 DataFrame 中删除行
- Python Pandas - DataFrame 的算术运算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 读取和写入 JSON 文件
- Python Pandas - 从 Excel 文件读取数据
- Python Pandas - 将数据写入 Excel 文件
- Python Pandas - 使用 HTML 数据
- Python Pandas - 剪贴板
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 与 SQL 的比较
- Python Pandas - 数据处理
- Python Pandas - 排序
- Python Pandas - 重索引
- Python Pandas - 迭代
- Python Pandas - 级联
- Python Pandas - 统计函数
- Python Pandas - 描述性统计
- Python Pandas - 处理文本数据
- Python Pandas - 函数应用
- Python Pandas - 选项和自定义
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 合并/连接
- Python Pandas - 多层索引
- Python Pandas - 多层索引基础
- Python Pandas - 使用多层索引进行索引
- Python Pandas - 使用多层索引的高级重索引
- Python Pandas - 重命名多层索引标签
- Python Pandas - 对多层索引进行排序
- Python Pandas - 二元运算
- Python Pandas - 二元比较运算
- Python Pandas - 布尔索引
- Python Pandas - 布尔掩码
- Python Pandas - 数据重塑和透视
- Python Pandas - 透视表
- Python Pandas - 堆叠和取消堆叠
- Python Pandas - 熔化
- Python Pandas - 计算虚拟变量
- Python Pandas - 类别数据
- Python Pandas - 类别数据
- Python Pandas - 类别数据的排序
- Python Pandas - 比较类别数据
- Python Pandas - 处理缺失数据
- Python Pandas - 缺失数据
- Python Pandas - 填充缺失数据
- Python Pandas - 缺失值的插值
- Python Pandas - 删除缺失数据
- Python Pandas - 使用缺失数据进行计算
- Python Pandas - 处理重复数据
- Python Pandas - 重复数据
- Python Pandas - 计数和检索唯一元素
- Python Pandas - 重复标签
- Python Pandas - 分组和聚合
- Python Pandas - GroupBy
- Python Pandas - 时间序列数据
- Python Pandas - 日期功能
- Python Pandas - 时间增量
- Python Pandas - 稀疏数据结构
- Python Pandas - 稀疏数据
- Python Pandas - 可视化
- Python Pandas - 可视化
- Python Pandas - 其他概念
- Python Pandas - 警告和陷阱
- Python Pandas 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用资源
- Python Pandas - 讨论
Python Pandas - 窗口函数
Pandas 中的窗口函数提供了一种强大的方法来对一系列数据执行操作,允许您计算统计数据和其他聚合数据窗口中的数据点。这些函数在时间序列分析和其他需要考虑每个观测值周围一系列数据点的情况中特别有用。
Pandas 支持四种主要的窗口操作类型:
滚动窗口:一个可以是固定大小或可变大小的滑动窗口。
加权窗口:由 scipy.signal 库提供的非矩形加权窗口。
扩展窗口:一个累积窗口,包含直到当前点的所有数据点。
指数加权窗口:一个累积窗口,对以前的数据点应用指数加权。
我们现在将学习如何将这些应用于 DataFrame 对象。
滚动窗口
滚动窗口操作涉及在数据上移动一个固定大小的窗口,在该窗口内执行聚合函数(如求和或平均值)。它非常灵活,并支持各种基于时间的操作。
要执行此操作,我们可以使用rolling() 函数。此函数可以应用于一系列数据。指定window=n 参数并在其之上应用适当的统计函数。rolling() 函数返回pandas.typing.api.Rolling 对象。
示例
以下是使用rolling() 函数在 DataFrame 上应用滚动窗口操作的示例。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print(df.rolling(window=3).mean())
其输出如下:
A B C D 2000-01-01 NaN NaN NaN NaN 2000-01-02 NaN NaN NaN NaN 2000-01-03 0.434553 -0.667940 -1.051718 -0.826452 2000-01-04 0.628267 -0.047040 -0.287467 -0.161110 2000-01-05 0.398233 0.003517 0.099126 -0.405565 2000-01-06 0.641798 0.656184 -0.322728 0.428015 2000-01-07 0.188403 0.010913 -0.708645 0.160932 2000-01-08 0.188043 -0.253039 -0.818125 -0.108485 2000-01-09 0.682819 -0.606846 -0.178411 -0.404127 2000-01-10 0.688583 0.127786 0.513832 -1.067156
注意:由于窗口大小为 3,因此前两个元素为空,从第三个元素开始,值为n、n-1 和n-2 元素的平均值。因此,我们也可以应用上面提到的各种函数。
加权窗口
加权窗口应用非矩形窗口函数,通常用于信号处理。win_type 参数用于指定窗口类型,它对应于scipy.signal 库中的窗口函数。
示例
此示例演示了在 Pandas Series 对象上应用加权窗口操作。
import pandas as pd # Creating a series s = pd.Series(range(10)) # Applying a triangular weighted window result = s.rolling(window=5, win_type="triang").mean() print(result)
当我们运行上述程序时,它会产生以下结果:
0 NaN 1 NaN 2 NaN 3 NaN 4 2.0 5 3.0 6 4.0 7 5.0 8 6.0 9 7.0 dtype: float64
扩展窗口
扩展窗口计算直到当前点为止的所有可用数据点的聚合统计数据,允许进行累积计算。
expanding() 函数可以应用于一系列数据。指定min_periods=n 参数并在其之上应用适当的统计函数。此函数返回pandas.typing.api.Expanding 对象。
示例
以下是 DataFrame 对象上应用扩展窗口操作的示例。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print(df.expanding(min_periods=3).mean())
其输出如下:
A B C D 2000-01-01 NaN NaN NaN NaN 2000-01-02 NaN NaN NaN NaN 2000-01-03 0.434553 -0.667940 -1.051718 -0.826452 2000-01-04 0.743328 -0.198015 -0.852462 -0.262547 2000-01-05 0.614776 -0.205649 -0.583641 -0.303254 2000-01-06 0.538175 -0.005878 -0.687223 -0.199219 2000-01-07 0.505503 -0.108475 -0.790826 -0.081056 2000-01-08 0.454751 -0.223420 -0.671572 -0.230215 2000-01-09 0.586390 -0.206201 -0.517619 -0.267521 2000-01-10 0.560427 -0.037597 -0.399429 -0.376886
指数加权窗口
这种类型的窗口操作对以前的数据点应用指数加权,这意味着较旧的数据点的重要性逐渐降低。
ewm() 函数应用于一系列数据。指定任何 com、span、halflife 参数并在其之上应用适当的统计函数。它以指数方式分配权重。此函数返回pandas.typing.api.ExponentialMovingWindow 对象。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2000', periods=10),
columns = ['A', 'B', 'C', 'D'])
print(df.ewm(com=0.5).mean())
其输出如下:
A B C D 2000-01-01 1.088512 -0.650942 -2.547450 -0.566858 2000-01-02 0.865131 -0.453626 -1.137961 0.058747 2000-01-03 -0.132245 -0.807671 -0.308308 -1.491002 2000-01-04 1.084036 0.555444 -0.272119 0.480111 2000-01-05 0.425682 0.025511 0.239162 -0.153290 2000-01-06 0.245094 0.671373 -0.725025 0.163310 2000-01-07 0.288030 -0.259337 -1.183515 0.473191 2000-01-08 0.162317 -0.771884 -0.285564 -0.692001 2000-01-09 1.147156 -0.302900 0.380851 -0.607976 2000-01-10 0.600216 0.885614 0.569808 -1.110113
窗口函数主要用于通过平滑曲线在图形上查找数据中的趋势。如果日常数据变化很大并且有大量数据点可用,则获取样本并绘制图形是一种方法,而应用窗口计算并在结果上绘制图形是另一种方法。通过这些方法,我们可以平滑曲线或趋势。