我正在处理看起来像这样的大型数据集:
Time, Value
01.01.2018 00:00:00.000, 5.1398
01.01.2018 00:01:00.000, 5.1298
01.01.2018 00:02:00.000, 5.1438
01.01.2018 00:03:00.000, 5.1228
01.01.2018 00:04:00.000, 5.1168
.... , ,,,,
31.12.2018 23:59:59.000, 6.3498
数据是minute
数据,从每年的first
到每年的last
我想使用Pandas
来查找每5
天的平均值。
例如:
从01.01.2018 00:00:00.000
到05.01.2018 23:59:59.000
的平均值是05.01.2018
的平均值
下一个平均值将为02.01.2018 00:00:00.000
的{{1}}到6.01.2018 23:59:59.000
的平均值
下一个平均值将为06.01.2018
的{{1}}到03.01.2018 00:00:00.000
的平均值
以此类推...我们将day增加1,但计算的是该天到过去5天(包括当前日期)的平均值。
在给定的一天中,有24小时* 60分钟= 1440个数据点。因此,我需要获取1440个数据点的平均值* 5天= 7200个数据点。
最终的DataFrame如下所示,时间格式为[DD.MM.YYYY](不含hh:mm:ss),7.01.2018 23:59:59.000
是5个数据的平均值,包括当前日期:
07.01.2018
最重要的是计算从今天到过去5天的平均值,平均值如上所示。
我尝试遍历Python循环,但是我想要比Pandas更好的东西。
答案 0 :(得分:2)
也许这行得通吗?
import numpy as np
# Create one year of random data spaced evenly in 1 minute intervals.
np.random.seed(0) # So that others can reproduce the same result given the random numbers.
time_idx = pd.date_range(start='2018-01-01', end='2018-12-31', freq='min')
df = pd.DataFrame({'Time': time_idx, 'Value': abs(np.random.randn(len(time_idx))) + 5})
>>> df.shape
(524161, 2)
鉴于数据框的间隔为1分钟,您可以对过去五天(5天* 24小时/天* 60分钟/小时= 7200分钟)进行滚动平均,并将结果分配给名为{{ 1}}。然后,您可以使用rolling_5d_avg
访问器方法将原始时间戳分组,以获取日期,然后获取每个日期的最后一个dt
值。
rolling_5d_avg