我有一组熊猫时间戳和值的数据集。时间戳之间的间隔大约是一年的总时间中的约12秒,但有时会丢失点(即时间序列不规则,因此我无法使用固定的窗口大小)。
我想计算1分钟间隔内值的滚动平均值,但没有得到我期望的行为。我发现了一个类似的问题here,但它使用的是总和,也使用的是熊猫版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填充缺失值,但对于平均值,我不希望将缺失点计为真实数据点(例如,我希望窗口为求和(数据点在给定的间隔内)/间隔内的数据点数)。
我想在不同的时间段(例如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循环来手动执行此操作?
答案 0 :(得分:0)
我认为问题可能出在您的数据中。然后也许我没有解决问题。使用您的数据时,我遇到了同样的错误,但是当我尝试执行此操作时,它仍然起作用。
import pandas as pd
import numpy as np
import datetime
time = pd.date_range(start='1/1/2018', end='1/02/2018', freq='12s')
time
DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01 00:00:12',
'2018-01-01 00:00:24', '2018-01-01 00:00:36',
'2018-01-01 00:00:48', '2018-01-01 00:01:00',
'2018-01-01 00:01:12', '2018-01-01 00:01:24',
'2018-01-01 00:01:36', '2018-01-01 00:01:48',
...
'2018-01-01 23:58:12', '2018-01-01 23:58:24',
'2018-01-01 23:58:36', '2018-01-01 23:58:48',
'2018-01-01 23:59:00', '2018-01-01 23:59:12',
'2018-01-01 23:59:24', '2018-01-01 23:59:36',
'2018-01-01 23:59:48', '2018-01-02 00:00:00'],
dtype='datetime64[ns]', length=7201, freq='12S')
B = np.random.randint(0, 9, 7201)
df = pd.DataFrame(B, time)
df['rolling_avg']=df.rolling('60s', min_periods=3).mean()
df.head(20)
0 rolling_avg
2018-01-01 00:00:00 5 NaN
2018-01-01 00:00:12 0 NaN
2018-01-01 00:00:24 1 2.0
2018-01-01 00:00:36 0 1.5
2018-01-01 00:00:48 6 2.4
2018-01-01 00:01:00 7 2.8
2018-01-01 00:01:12 6 4.0
2018-01-01 00:01:24 3 4.4
2018-01-01 00:01:36 7 5.8
2018-01-01 00:01:48 6 5.8
2018-01-01 00:02:00 2 4.8
2018-01-01 00:02:12 6 4.8
2018-01-01 00:02:24 1 4.4
2018-01-01 00:02:36 0 3.0
2018-01-01 00:02:48 8 3.4
2018-01-01 00:03:00 2 3.4
2018-01-01 00:03:12 5 3.2
2018-01-01 00:03:24 8 4.6
2018-01-01 00:03:36 4 5.4
2018-01-01 00:03:48 1 4.0