![](/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.