【发布时间】:2018-04-13 03:14:33
【问题描述】:
我有每小时间隔的值的历史记录,并且我想在数据框中添加一列,以显示每天该小时的平均值。因此,如果 4:00 的平均值是 34,我希望每个 4:00 小时的日期在名为“平均值”的列中都有 34。现在,我可以在表格中获得带有小时数的平均值,但似乎无法让它加入多个位置。
Timestamp Value
2018-04-12 13:00:00 12.0
2018-04-12 12:00:00 38.0
2018-04-12 11:00:00 12.0
2018-04-12 10:00:00 28.0
2018-04-12 09:00:00 26.0
2018-04-12 08:00:00 22.0
...
Average
00:00 7.0
01:00 0.0
02:00 0.0
03:00 0.0
04:00 0.0
05:00 1.5
06:00 11.5
07:00 11.0
08:00 10.5
...
目标:
Timestamp Value Average
2018-04-12 13:00:00 12.0 8.5
2018-04-12 12:00:00 38.0 8.4
2018-04-12 11:00:00 12.0 15.5
2018-04-12 10:00:00 28.0 19.0
2018-04-12 09:00:00 26.0 12.4
2018-04-12 08:00:00 22.0 10.5
我尝试过合并和加入,但还没有弄清楚如何手动循环来完成它。
【问题讨论】:
-
您能否展示一下您是如何获得平均值的,也许还有更多的数据框?现在它没有重复的小时数来计算平均值。
-
如果平均值是预先计算的并且您只是想合并两个数据帧,您可以使用
leftmerge。确保带有Timestamps的数据框是left数据框。 -
从这个剪切和粘贴中,不清楚您的“时间戳”列是包含日期和时间的实际时间戳、包含日期和时间的字符串,还是包含日期和列的索引时间。如果它是前两个选项之一,您需要在进行合并之前对其进行不同的处理以自行获取小时。
-
感谢cmets,下面的答案把它钉在了头上。 Hour 字段是字符串格式的,但很容易将它们转换回日期时间。我得到了平均值:
group_date = [datetime.datetime.strftime(e, '%H:%M') for e in df.index]avgs = df.groupby(group_date)['Value'].mean()'