簡體   English   中英

通過pd.TimeGrouper('D')按天匯總每小時時間序列; 發行@時間戳00:00:00(24小時)

[英]aggregating hourly time series by Day via pd.TimeGrouper('D'); issue @ timestamp 00:00:00 (hour 24)

DF:

                    hour    rev
datetime        
2016-05-01 01:00:00 1   -0.02
2016-05-01 02:00:00 2   -0.01
2016-05-01 03:00:00 3   -0.02
2016-05-01 04:00:00 4   -0.02
2016-05-01 05:00:00 5   -0.01
2016-05-01 06:00:00 6   -0.03
2016-05-01 07:00:00 7   -0.10
2016-05-01 08:00:00 8   -0.09
2016-05-01 09:00:00 9   -0.08
2016-05-01 10:00:00 10  -0.10
2016-05-01 11:00:00 11  -0.12
2016-05-01 12:00:00 12  -0.14
2016-05-01 13:00:00 13  -0.17
2016-05-01 14:00:00 14  -0.16
2016-05-01 15:00:00 15  -0.15
2016-05-01 16:00:00 16  -0.15
2016-05-01 17:00:00 17  -0.17
2016-05-01 18:00:00 18  -0.16
2016-05-01 19:00:00 19  -0.18
2016-05-01 20:00:00 20  -0.17
2016-05-01 21:00:00 21  -0.14
2016-05-01 22:00:00 22  -0.16
2016-05-01 23:00:00 23  -0.08
2016-05-02 00:00:00 24  -0.06

df.reset_index()to_dict( 'REC'):

[{'datetime': Timestamp('2016-05-01 01:00:00'), 'hour': 1L, 'rev': -0.02},
 {'datetime': Timestamp('2016-05-01 02:00:00'), 'hour': 2L, 'rev': -0.01},
 {'datetime': Timestamp('2016-05-01 03:00:00'), 'hour': 3L, 'rev': -0.02},
 {'datetime': Timestamp('2016-05-01 04:00:00'), 'hour': 4L, 'rev': -0.02},
 {'datetime': Timestamp('2016-05-01 05:00:00'), 'hour': 5L, 'rev': -0.01},
 {'datetime': Timestamp('2016-05-01 06:00:00'), 'hour': 6L, 'rev': -0.03},
 {'datetime': Timestamp('2016-05-01 07:00:00'), 'hour': 7L, 'rev': -0.1},
 {'datetime': Timestamp('2016-05-01 08:00:00'), 'hour': 8L, 'rev': -0.09},
 {'datetime': Timestamp('2016-05-01 09:00:00'), 'hour': 9L, 'rev': -0.08},
 {'datetime': Timestamp('2016-05-01 10:00:00'), 'hour': 10L, 'rev': -0.1},
 {'datetime': Timestamp('2016-05-01 11:00:00'), 'hour': 11L, 'rev': -0.12},
 {'datetime': Timestamp('2016-05-01 12:00:00'), 'hour': 12L, 'rev': -0.14},
 {'datetime': Timestamp('2016-05-01 13:00:00'), 'hour': 13L, 'rev': -0.17},
 {'datetime': Timestamp('2016-05-01 14:00:00'), 'hour': 14L, 'rev': -0.16},
 {'datetime': Timestamp('2016-05-01 15:00:00'), 'hour': 15L, 'rev': -0.15},
 {'datetime': Timestamp('2016-05-01 16:00:00'), 'hour': 16L, 'rev': -0.15},
 {'datetime': Timestamp('2016-05-01 17:00:00'), 'hour': 17L, 'rev': -0.17},
 {'datetime': Timestamp('2016-05-01 18:00:00'), 'hour': 18L, 'rev': -0.16},
 {'datetime': Timestamp('2016-05-01 19:00:00'), 'hour': 19L, 'rev': -0.18},
 {'datetime': Timestamp('2016-05-01 20:00:00'), 'hour': 20L, 'rev': -0.17},
 {'datetime': Timestamp('2016-05-01 21:00:00'), 'hour': 21L, 'rev': -0.14},
 {'datetime': Timestamp('2016-05-01 22:00:00'), 'hour': 22L, 'rev': -0.16},
 {'datetime': Timestamp('2016-05-01 23:00:00'), 'hour': 23L, 'rev': -0.08},
 {'datetime': Timestamp('2016-05-02 00:00:00'), 'hour': 24L, 'rev': -0.06}]

df.set_index('datetime', inplace=True)

我想按DAY匯總數據。 所以我做:

dfgrped = df.groupby([pd.TimeGrouper('D')])

我想計算總和之類的統計信息:

dfgrped.agg(sum)

            hour    rev
datetime        
2016-05-01  276 -2.43
2016-05-02  24  -0.06

如您所見,聚合發生在2016-05-012016-05-02

請注意,df中的最后一個小時數據輸入發生在2016-05-02 00:00:00,這意味着是前一天的最后一個小時的數據,即每天24個小時數據點。

但是,給定日期時間戳,事情並沒有達到我的預期。 我希望在2016-05-01匯總所有24小時。

我認為在小時結束時進行測量時,在各種應用中經常會出現這種問題。 直到最后一個小時才出現問題,該時間發生在第二天的00:00:00時間戳。

如何在熊貓中解決這個問題?

駭客解決方案,如果您每天的起點都大於一秒,則可以從日期時間列中減去一秒,然后從分組日期中減去一秒,這似乎適用於您的情況:

from datetime import timedelta
import pandas as pd
df.groupby((df.datetime - timedelta(seconds = 1)).dt.date).sum()

#             hour    rev
#   datetime        
# 2016-05-01   300  -2.49

它看起來像是另一種駭客,但它應該可以做到:

In [79]: df.assign(t=df.datetime - pd.Timedelta(hours=1)).drop('datetime',1).groupby(pd.TimeGrouper('D', key='t')).sum()
Out[79]:
            hour   rev
t
2016-05-01   300 -2.49

只需.shift(-1)或。 roll(-1)rev列,后退一列。 因此,時間戳記將是期間開始與期間結束。 您將需要添加一個時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM