当前位置: 首页 > news >正文

【Pandas】pandas DataFrame rolling

Pandas2.2 DataFrame

Function application, GroupBy & window

方法描述
DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴(行或列)应用一个函数
DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数
DataFrame.applymap(func[, na_action])用于对 DataFrame 中的每一个元素应用一个函数
DataFrame.pipe(func, *args, **kwargs)用于实现链式编程风格的方法
DataFrame.agg([func, axis])用于对 DataFrame 的数据进行聚合操作
DataFrame.aggregate([func, axis])用于对 DataFrame 进行聚合操作的方法
DataFrame.transform(func[, axis])用于对 DataFrame 的列或行应用函数
DataFrame.groupby([by, axis, level, …])用于进行分组操作的核心方法
DataFrame.rolling(window[, min_periods, …])用于在 DataFrame 上创建滑动窗口对象

pandas.DataFrame.rolling()

pandas.DataFrame.rolling() 用于在 DataFrame 上创建滑动窗口对象,支持对窗口内的数据应用聚合函数(如均值、求和等)。以下是详细说明及示例:


语法
DataFrame.rolling(window,                # 窗口大小(观测数量或时间间隔)min_periods=None,      # 窗口内最小非NaN数据量(默认等于window)center=False,          # 是否居中窗口(默认窗口向后对齐)win_type=None,         # 窗口类型(如 'triang', 'gaussian' 等)on=None,               # 对指定列(时间序列)应用窗口axis=0,                # 轴向:0(按列滑动),1(按行滑动)closed=None,           # 窗口闭合方式:'left', 'right', 'both', 'neither'step=None,             # 窗口步长(滑动间隔)method='single'        # 多列计算方式:'single' 或 'table'
)

示例
示例 1:基本滑动窗口(计算移动平均)
import pandas as pddf = pd.DataFrame({'Value': [1, 2, 3, 4, 5]})
# 窗口大小为3,计算移动平均
rolling_mean = df.rolling(window=3).mean()
print(rolling_mean)

输出:

   Value
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0

解释

  • 窗口大小为3,前两个位置(索引0、1)数据不足,结果为NaN。
  • 索引2的结果为前3个值的均值:(1+2+3)/3 = 2.0

示例 2:居中窗口(center=True
# 居中窗口,窗口大小为3
rolling_mean_centered = df.rolling(window=3, center=True).mean()
print(rolling_mean_centered)

输出:

   Value
0    NaN
1    2.0
2    3.0
3    4.0
4    NaN

解释

  • 窗口以当前行为中心,前后各取1个值(总宽度3)。
  • 索引0和4因数据不足为NaN。

示例 3:使用窗口类型(win_type
# 使用高斯加权窗口(窗口大小5,标准差0.6)
rolling_gaussian = df.rolling(window=5, win_type='gaussian').mean(std=0.6)
print(rolling_gaussian)

输出:

     Value
0      NaN
1      NaN
2      NaN
3      NaN
4  3.00000

解释

  • 窗口大小为5,前4个位置数据不足,结果为NaN。
  • 索引4的结果为加权平均(权重由高斯函数生成)。

示例 4:时间序列窗口(on 参数)
# 创建时间序列数据
date_rng = pd.date_range(start='2023-01-01', periods=5, freq='D')
df_time = pd.DataFrame({'Date': date_rng, 'Value': [1, 2, 3, 4, 5]})
# 按时间窗口(2天)计算均值
rolling_time = df_time.rolling(window='2D', on='Date').mean()
print(rolling_time)

输出:

        Date  Value
0 2023-01-01    1.0
1 2023-01-02    1.5
2 2023-01-03    2.5
3 2023-01-04    3.5
4 2023-01-05    4.5

解释

  • 窗口按时间跨度(2天)滑动。
  • 例如,索引1的均值为 (1+2)/2 = 1.5

示例 5:按行滑动(axis=1
df_row = pd.DataFrame([[1, 2, 3], [4, 5, 6]])
# 横向滑动窗口(窗口大小2)
rolling_row = df_row.rolling(window=2, axis=1).sum()
print(rolling_row)

输出:

   0     1     2
0 NaN   3.0   5.0
1 NaN   9.0  11.0

解释

  • 按行横向滑动,窗口大小为2。
  • 例如,第0行的结果:NaN(窗口不足), 1+2=3, 2+3=5

示例 6:自定义聚合函数
# 计算窗口内最大值与最小值的差值
df = pd.DataFrame({'Value': [2, 5, 3, 8, 1]})
rolling_range = df.rolling(window=3).apply(lambda x: x.max() - x.min())
print(rolling_range)

输出:

   Value
0    NaN
1    NaN
2    3.0
3    5.0
4    7.0

解释

  • 窗口大小为3。
  • 索引2的结果:max(2,5,3)=5min=2,差值 3

注意事项
  1. 窗口大小:若 window 为偶数且 center=True,窗口会向前多取一个值。
  2. 时间序列窗口:使用 on 参数时,需要指定时间列。
  3. 缺失值处理:通过 min_periods 控制允许的最小非NaN数据量。
  4. 窗口类型:如 win_type='gaussian' 需配合 std 参数指定标准差。

相关文章:

  • 每日一练(5~7):移动零·(双指针算法)
  • uniapp自定义底部导航栏h5有效果小程序无效的解决方案
  • 学习基本开锁知识
  • 探索智能体开发新边界:Cangjie Magic开源平台体验与解析
  • 排列组合算法:解锁数据世界的魔法钥匙
  • MATLAB导出和导入Excel文件表格数据并处理
  • nRF Connect SDK system off模式介绍
  • 【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析
  • React学习路线-Deepseek版
  • 如何应对客户在验收后提出新需求?
  • 【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)
  • 多模态大语言模型arxiv论文略读(六十三)
  • 源码分析之Leaflet中的LayerGroup
  • 【AI提示词】双系统理论专家
  • Node.js面试题
  • 如何统一修改word中所有英文字母的字体格式
  • Java后端开发day43--IO流(三)--缓冲流转换流序列化流
  • ChromeDriverManager的具体用法
  • 鸿蒙开发Flex也可以用权重
  • Ceph集群OSD运维手册:基础操作与节点扩缩容实战
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 综艺还有怎样的新可能?挖掘小众文化领域
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯
  • “降息潮”延续!存款利率全面迈向“1时代”
  • 2025柯桥时尚周启幕:国际纺都越来越时尚
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%