熊猫:计算时间范围内的平均值

时间:2019-06-27 23:04:08

标签: python python-3.x pandas

我正在处理看起来像这样的大型数据集:

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.00005.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更好的东西。

1 个答案:

答案 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