我有以下数据框df
:
[输出]:
VOL
2011-04-01 09:30:00 11297
2011-04-01 09:30:10 6526
2011-04-01 09:30:20 14021
2011-04-01 09:30:30 19472
2011-04-01 09:30:40 7602
...
2011-04-29 15:59:30 79855
2011-04-29 15:59:40 83050
2011-04-29 15:59:50 602014
这df
包括连续22天每10秒进行一次体积观测。我想通过将每个观察值除以它们各自5分钟时间间隔的平均体积来对时间序列进行反季节化。为此,我需要获取22天中每5分钟的时间序列平均值。因此,我将9:30:00 - 9:35:00; 9:35:00 - 9:40:00; 9:40:00 - 9:45:00 ...
得出每5分钟一次的平均时间序列,直到16:00:00。间隔9:30:00 - 9:35:00
的平均值是该时间间隔在所有22天中的平均值(即,因此9:30:00到9:35:00之间的平均值是9:30:00到9:35之间的总体积: 00 on(第1天+第2天+第3天...第22天)/22。有意义吗?)。然后我会将每个中的观察df
是之间9:30:00 - 9:35:00
由平均这个时间间隔的。
Python / Pandas中是否有可以做到这一点的软件包?
编辑答案:
date_times = pd.date_range(datetime.datetime(2011, 4, 1, 9, 30),
datetime.datetime(2011, 4, 16, 0, 0),
freq='10s')
VOL = np.random.sample(date_times.size) * 10000.0
df = pd.DataFrame(data={'VOL': VOL,'time':date_times}, index=date_times)
df['h'] = df.index.hour
df['m'] = df.index.minute
df1 = df.resample('5Min', how={'VOL': np.mean})
times = pd.to_datetime(df1.index)
df2 = df1.groupby([times.hour,times.minute]).VOL.mean().reset_index()
df2.columns = ['h','m','VOL']
df.merge(df2,on=['h','m'])
df_norm = df.merge(df2,on=['h','m'])
df_norm['norm'] = df_norm['VOL_x']/df_norm['VOL_y']
**较旧的答案(暂时保留)
使用重采样功能
df.resample('5Min', how={'VOL': np.mean})
例如:
date_times = pd.date_range(datetime.datetime(2011, 4, 1, 9, 30),
datetime.datetime(2011, 4, 16, 0, 0),
freq='10s')
VOL = np.random.sample(date_times.size) * 10000.0
df = pd.DataFrame(data={'VOL': VOL}, index=date_times)
df.resample('5Min', how={'VOL': np.mean})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句