【发布时间】:2019-07-06 17:12:11
【问题描述】:
我在 pandas 中有一组时间戳和值。时间戳之间的间隔在大约一年的总时间跨度内约为 12 秒,但有时会丢失点(即时间序列是不规则的,所以我不能使用固定的窗口大小)。
我想计算 1 分钟间隔内的值的滚动平均值,但我没有得到我预期的行为。我发现了一个类似的问题here,但那是使用 sum 和 pre-pandas 0.19.0。我正在使用 Pandas 0.23.4。
样本数据
Time, X
2018-02-02 21:27:00, 75.4356
2018-02-02 21:27:12, 78.29821
2018-02-02 21:27:24, 73.098345
2018-02-02 21:27:36, 78.3331
2018-02-02 21:28:00, 79.111
请注意,2018-02-02 21:27:48 已丢失。
对于滚动求和,我可以只用 0 填充缺失值,但对于平均值,我不希望缺失点被计为真实数据点(例如,我希望窗口为 sum(data points在给定的区间内)/区间内的数据点数)。
我想在不同的时间段(即 1 分钟、5 分钟、15 分钟、1 小时等)执行此操作。
最接近实际值的方法是:
代码
df['rolling_avg']=df.rolling('1T',on='Time').X.mean()
我的理解是 1 分钟的滚动平均值。
但是,我不确定如何解释输出。我本来预计前 1+1 分钟会出现 NaN,因为没有什么可以作为滚动平均值的基础,但我有值。
输出
Time X rolling_avg
0 2018-02-02 21:27:00 75.4356 75.435600
1 2018-02-02 21:27:12 78.29821 76.866905
2 2018-02-02 21:27:24 73.098345 75.610718
3 2018-02-02 21:27:36 78.3331 76.291314
4 2018-02-02 21:28:00 79.111 77.210164
基本上,在此输出中,df[1].rolling_avg 是 (Value[0]+Value[1])/2,尽管间隔是 12 秒,而不是 1 分钟。
有没有办法做我想做的事情,还是我需要编写一个 for 循环来手动执行此操作?
【问题讨论】:
-
试试这个... df['rolling_avg']=df.rolling('60s').X.mean()
-
@run-out 这给了
ValueError: window must be an integer -
在下面我的回答中,我想知道您的日期时间格式是否正确。如果是字符串就不行。
-
输出看起来不一致吗?您正在寻找 1 分钟间隔的平均值..
标签: python pandas dataframe moving-average rolling-average