Python 熊猫:在CSV中查找每10个数据点的平均值

Python 熊猫:在CSV中查找每10个数据点的平均值,python,python-3.x,pandas,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 数据是从一年中的第一天到最后一

我有大量的数据集:

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
数据是从一年中的第一天到最后一天的
分钟
数据

我想使用
Pandas
查找每5天的平均值。例如:

2018年05月01日<代码>的平均值从
2018年01月01日00:00:00.000
2018年01月05日23:59:59.000

下一个平均值将从
2018年01月02日00:00:00.000
2018年01月6日23:59:59.000
,适用于
2018年01月06日

下一个平均值将从
2018年01月03日00:00:00.000
2018年01月7日23:59:59.000
,适用于
2018年01月07日

等等

对于给定的一天,有24小时*60分钟=1440个数据点。所以我需要得到1440个数据点的平均值*5天=7200个数据点

最终的数据帧如下所示:

Time,   Value
05.01.2018,  5.1398
06.01.2018,  5.1298
07.01.2018,  5.1438
.... , ,,,,
31.12.2018,  6.3498
底线是计算从今天到过去5天的数据平均值,平均值如上所示

我试图迭代Python循环,但我想要比Pandas做得更好的东西。

IIUC 你想做滚动,然后每天重新采样

安装程序 解决方案 当你们在时间窗前滚动时,有趣的是熊猫不知道你们什么时候开始了一个完整的滚动期。因此,
df.rolling('5D').mean()
将立即开始取平均值。您可以通过调整每天重新采样后的前5天(或4天)来解决此问题

df.rolling('5D').mean().resample('D').last().iloc[4:]

            Value
Time             
2018-01-05    4.5
2018-01-06    6.5
2018-01-07    8.5

正如您所述,您每分钟都有的数据,即每天的数值总是相同的(1440),那么您可以简单地采用每日平均值,然后采用这些每日平均值的5天滚动窗口的平均值

示例(值是以年为单位的运行分钟数,从0开始):

结果:

2018-01-05      3599.5
2018-01-06      5039.5
2018-01-07      6479.5
2018-01-08      7919.5
                ...   
2018-12-28    517679.5
2018-12-29    519119.5
2018-12-30    520559.5
2018-12-31    521999.5

rolling(5.mean()
rolling(5.mean()
给出了有希望的输出。我还需要在数据帧中添加,time,avg,就像上面最后的数据帧输出一样。@QuangHoang:为了清晰起见,我更新了问题。为了清晰起见,我更新了问题。对于给定的一天,有24小时*60分钟=1440个数据点。所以我需要得到1440个数据点的平均值*5天=7200个数据点,以此类推,第二天。。。
s = pd.Series(pd.date_range('2018-01-01', '2018-12-31 23:59', freq='1T'))
df = pd.DataFrame(s.index.values, index=s, columns=['Value'])
df.groupby(df.index.floor('d'))['Value'].mean().rolling(5).mean().dropna() 
2018-01-05      3599.5
2018-01-06      5039.5
2018-01-07      6479.5
2018-01-08      7919.5
                ...   
2018-12-28    517679.5
2018-12-29    519119.5
2018-12-30    520559.5
2018-12-31    521999.5