【发布时间】:2019-07-16 16:02:01
【问题描述】:
序言
如何将函数应用于具有非重叠滑动窗口的列表。例如。 data = {x_1, x_2, ...., x_n} 并且我们应用 f 和窗口大小 2 来获得 {f(x_1,x_2), f(x_3, x_4), ...., f(x_{n-1}, x_n)}。
我了解我可以在分区列表上进行分区和使用 map。但是有没有更有效的方法来处理这个操作,尤其是对于 ndarray 和 dataframe?类似于 Mathematica 的 BlockMap 的东西。
问题
这样做的最终目标是:假设数据框是一个时间序列,其中包含一天中每个小时的值。如何每天应用一个函数(例如平均值、方差),即具有 24 小时大小的非重叠窗口的函数块图?
编辑 1: 这是一个返回 pandas 数据框的代码:
import pandas as pd
import numpy as np
dat = np.random.uniform(0,10,40)
xpd = pd.DataFrame(dat)
xpd.rename(columns = {0:'new_name'}, inplace = True)
date_rng = pd.date_range(start='1/1/2018 03:00:00', periods=40, freq='H')
xpd.set_index(date_rng, inplace=True)
我如何计算每天的方差,即从每小时数据,并作为数据框返回。 我尝试了以下行,但没有成功:
xpd.groupby(by=lambda x: pd.Series.dt.floor(x, freq='d'))
编辑 2 这行得通,问题似乎解决了:
xpd.groupby(by=lambda x: x.floor('d')).var()
【问题讨论】:
-
n % 2 != 0的情况你想怎么处理? -
@norok2 假设它是偶数,或者只是左右填充相同的值。
-
这不是另一个变体,这是一个完全不同的问题,除非你有一个恒定的时间步长并且你可以依赖行数。你可能应该问一个新问题。
-
@norok2 是的,时间步长确实是恒定的。
-
是的,定义不明确。
标签: python pandas numpy dataframe time-series