python中rolling相关函数的应用

1. rolling() 函数的应用

5 为间隔,求每个窗口内数据的标准差。

df_10min_1['tstd'] = df_10min_1['tempe'].rolling(window=5).agg([lambda x: x, np.std])

dfindex 为时间格式,可以以时间作为间隔,进行 rolling,如下代码所示:

sta_all_itvl = df.rolling(t_itvl).agg([lambda x: x[0], np.ptp])

np.ptp:求最大值与最小值的差

np.ptp([1, 2, 3, 10])

Out[1]: 9

2. rolling(60)和rolling(‘60s’)有何区别

2.1 abnormal_diffs[column].rolling(60).sum()abnormal_diffs[column].rolling('60s').sum()有何区别?

abnormal_diffs[column].rolling(60).sum()abnormal_diffs[column].rolling('60s').sum() 这两个表达式在 pandas 的上下文中有着重要的区别,主要体现在滚动窗口的类型上:

  1. abnormal_diffs[column].rolling(60).sum()

    • 这个表达式创建了一个固定大小的滚动窗口,窗口大小为60个数据点。
    • 这意味着在计算滚动总和时,它会考虑当前点和之前的59个数据点(共60个点)。
    • 这种方法适用于数据点间隔是均匀的情况,即每个数据点之间的时间间隔相同。
  2. abnormal_diffs[column].rolling('60s').sum()

    • 这个表达式创建了一个基于时间的滚动窗口,窗口大小为60秒。
    • 这意味着它会考虑当前时间点向前60秒内的所有数据点。
    • 这种方法适用于数据点间隔是不均匀的情况,即每个数据点之间的时间间隔可能不同。在这种情况下,窗口内包含的数据点数量可能因时间而异。

因此,选择哪种类型的滚动窗口取决于数据特性。如果每个数据点都是以固定的时间间隔(比如每秒)记录的,那么使用固定大小的滚动窗口(rolling(60))是合适的。但如果数据点记录的时间间隔不均匀,那么基于时间的滚动窗口(rolling('60s'))会是更好的选择,因为它可以确保窗口涵盖的是真实的60秒时间跨度。

2.2 使用这两个表达式时对数据的索引有要求吗

对数据的索引有一定的要求:

  1. 对于 abnormal_diffs[column].rolling(60).sum()

    • 这个表达式不要求数据的索引是特定类型。它只是简单地将每个连续的60个数据点作为一个窗口。
    • 这种方法适用于数据点间隔均匀的情况,但它并不关心数据点的实际时间戳。
  2. 对于 abnormal_diffs[column].rolling('60s').sum()

    • 这个表达式要求数据的索引是时间序列型(例如 pandas.DatetimeIndex)。这是因为它根据时间间隔(在此例中为60秒)来确定窗口的大小。
    • 这种方法用于处理时间间隔不均匀的数据,能够确保每个窗口准确地覆盖指定的时间长度。因此,数据的索引必须是时间戳,以便 pandas 能够理解和计算基于时间的窗口。

综上,选择哪种滚动窗口方法取决于数据索引类型以及数据点间隔的均匀性。如果数据索引不是时间序列类型,但您希望使用基于时间的窗口,您可能需要先将数据索引转换为 DatetimeIndex。反之,如果数据索引已经是时间序列类型,但数据点间隔非常均匀,您可以选择使用固定大小的窗口。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值