【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 pd

df = 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 参数指定标准差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值