![](/img/trans.png)
[英]How can I take the sum of consecutive series with True/False Values Pandas Python
[英]How can I correctly take the sum of a subset in a Pandas time series?
我有这个时间序列( raw_series
):
2016-03-30 00:01:00 2
2016-03-30 04:54:00 4
2016-03-30 08:51:00 1
2016-03-30 08:54:00 0
2016-03-30 08:55:00 1
2016-03-30 08:56:00 1
2016-03-30 08:57:00 2
2016-03-30 08:58:00 0
2016-03-30 09:00:00 1
2016-03-30 09:01:00 0
2016-03-30 09:04:00 0
2016-03-30 09:05:00 7
2016-03-30 09:06:00 4
2016-03-30 09:22:00 0
2016-03-30 09:24:00 8
2016-03-30 09:25:00 3
2016-03-30 09:28:00 0
2016-03-30 09:29:00 0
2016-03-30 09:39:00 1
2016-03-30 09:40:00 1
2016-03-30 09:41:00 1
我想计算09:00和08:00的值总和。 这就是我所做的(但不会起作用)
now = datetime.now()
try:
this_hour = raw_series[datetime(now.year, now.month, now.day, now.hour)].sum()
except KeyError:
this_hour = 0
prev = now - timedelta(hours=1)
try:
prev_hour = raw_series[datetime(prev.year, prev.month, prev.day, prev.hour)].sum()
except KeyError:
prev_hour = 0
我now
运行程序的时间是(从调试输出文件中复制):
[30/Mar/2016 09:59:45] DEBUG [main.views:267] now is 2016-03-30 09:59:41.318779
结果为: this_hour = 1.0
和prev_hour = 0
(异常)
我究竟做错了什么?
IIUC您可以使用pd.to_datetime
将索引转换为datetime.index
,然后使用mask数小时:
s = pd.Series([2, 4, 1, 0, 1, 1, 2, 0, 1, 0, 0, 7, 4, 0, 8, 3, 0, 0, 1, 1, 1], index=['2016-03-30 00:01:00', '2016-03-30 04:54:00', '2016-03-30 08:51:00', '2016-03-30 08:54:00', '2016-03-30 08:55:00', '2016-03-30 08:56:00', '2016-03-30 08:57:00', '2016-03-30 08:58:00', '2016-03-30 09:00:00', '2016-03-30 09:01:00', '2016-03-30 09:04:00', '2016-03-30 09:05:00', '2016-03-30 09:06:00', '2016-03-30 09:22:00', '2016-03-30 09:24:00', '2016-03-30 09:25:00', '2016-03-30 09:28:00', '2016-03-30 09:29:00', '2016-03-30 09:39:00', '2016-03-30 09:40:00', '2016-03-30 09:41:00'])
s.index = pd.to_datetime(s.index)
cur_hour = 9
prev_hour = cur_hour - 1
res1 = s[s.index.hour == cur_hour].sum()
res2 = s[s.index.hour == prev_hour].sum()
In [57]: res1
Out[57]: 26
In [58]: res2
Out[58]: 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.