[英]Groupby specific hour interval per day
我有一個看起來像這樣的數據框:
df =
val1 val2
date
----------------------------------
2021-06-01 00:00 1 3
2021-06-01 01:00 2 4
2021-06-01 02:00 3 5
2021-06-01 03:00 4 6
2021-06-01 04:00 5 7
2021-06-02 00:00 6 8
2021-06-02 01:00 7 9
2021-06-02 02:00 8 10
2021-06-02 03:00 9 11
2021-06-02 04:00 10 12
2021-06-03 00:00 11 13
2021-06-03 01:00 12 14
2021-06-03 02:00 13 15
2021-06-03 03:00 14 16
2021-06-03 04:00 15 17
如果我然后做類似的事情:
df_new = df.groupby(df.index.date).mean()
生成的數據框將是:
df_new =
val1 val2
date
----------------------------------
2021-06-01 3 5
2021-06-02 8 10
2021-06-03 13 15
但是,我希望這種情況僅在每天的特定時間間隔內發生。 所以在這種情況下,可能只從00:00-03:00
而不是04:00
。 因此,生成的數據框應該是:
df_true =
val1 val2
date
----------------------------------
2021-06-01 2.5 4.5
2021-06-02 7.5 9.5
2021-06-03 12.5 14.5
第一個想法是通過boolean indexing
過濾行,然后在groupby
或DataFrame.resample
中使用Grouper
:
df_new = df[df.index.hour < 4].groupby(pd.Grouper(freq='D')).mean()
df_new = df[df.index.hour < 4].resample('D').mean()
print (df_new)
val1 val2
date
2021-06-01 2.5 4.5
2021-06-02 7.5 9.5
2021-06-03 12.5 14.5
或者使用DataFrame.between_time
:
df_new = df.between_time('0:00', '3:00').groupby(pd.Grouper(freq='D')).mean()
df_new = df.between_time('0:00', '3:00').resample('D').mean()
print (df_new)
val1 val2
date
2021-06-01 2.5 4.5
2021-06-02 7.5 9.5
2021-06-03 12.5 14.5
我更喜歡@jezrael 的方法,但緊貼您當前的代碼,您可以這樣做:
m = (df.index.hour >=0) & (df.index.hour <= 3)
df[m].groupby(df[m].index.date).mean()
Output:
val1 val2
2021-06-01 2.5 4.5
2021-06-02 7.5 9.5
2021-06-03 12.5 14.5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.