【发布时间】:2019-09-02 03:13:18
【问题描述】:
我想使用前几天相同小时分钟的值的平均值填充 NaN。为简化起见,这是我的 df.
timstamp data
22/04/2016 09:00 1
22/04/2016 09:05 2
...
23/04/2016 09:00 3
23/04/2016 09:05 4
...
24/04/2016 09:00 5
24/04/2016 09:05 6
...
25/04/2016 09:00 7
25/04/2016 09:05 8
...
25/04/2016 10:00 NaN
25/04/2016 10:05 NaN
真实数据包含许多天,间隔为连续 5 分钟。
df = df.groupby(df.index.minute).fillna(df.data.rolling(3).mean()) 尝试从过去几天的前一小时分钟开始滚动平均值,但没有成功。
df = df.groupby(df.index.minute).ffill() 的另一种方法从前两行(即 7 和 8)获取值,这些值来自同一天前一小时的相同分钟。
但是,我想要以下结果:
timstamp data
22/04/2016 09:00 1
22/04/2016 09:05 2
...
23/04/2016 09:00 3
23/04/2016 09:05 4
...
24/04/2016 09:00 5
24/04/2016 09:05 6
...
25/04/2016 09:00 7
25/04/2016 09:05 8
25/04/2016 10:00 3
25/04/2016 10:05 4
其中值 3(倒数第二行)是前几天同一小时分钟的值的平均值(1、3 和 5 的平均值),4(最后一行)是 2 的平均值、 4 和 6。鉴于我的 df 的大小,我想取前几十天的平均值。
编辑
我越来越近了。使用以下代码,数据的平均值按我想要的类似小时和分钟计算:
df.set_index('timstamp', inplace=True)
df=df.groupby([df.index.hour, df.index.minute]).mean()
df.index.names = ["hour", "minute"]
但是,它使用整个数据来获得小时-分钟平均值。我想要的是只使用前几天的相同小时分钟,我可以在计算中设置过去的天数。然后,将得到的平均值用于填充 NaN。
【问题讨论】:
标签: python pandas group-by time-series fill