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