簡體   English   中英

使用Pandas數據框進行提前重采樣

[英]Advance resampling using Pandas dataframe

我有1分鍾的間隔數據。 對於同一系列,我想在30min(粗分辨率)和5min(精細分辨率)下重采樣為兩個頻率。 具有粗略和精細分辨率的數據是有條件的,如果數據超過閾值(在此示例中為-22),則應在5分鍾時重新采樣,否則應在30分鍾時重新采樣。 我在下面有一個示例數據集:

在這種情況下,我的閾值為-22,如果值小於-22,則以高分辨率(5分鍾)重新采樣,否則以粗糙分辨率(30分鍾)重新采樣

2018-03-20 08:02:00   -21.344299
2018-03-20 08:03:00   -21.303697
2018-03-20 08:04:00   -21.245916
2018-03-20 08:05:00   -21.328162
2018-03-20 08:06:00   -21.296409
2018-03-20 08:07:00   -21.318793
2018-03-20 08:08:00   -21.259450
2018-03-20 08:09:00   -21.346382
2018-03-20 08:10:00   -21.424463
2018-03-20 08:11:00   -21.466628
2018-03-20 08:12:00   -21.408326
2018-03-20 08:13:00   -21.346902
2018-03-20 08:14:00   -21.374491
2018-03-20 08:15:00   -21.536902
2018-03-20 08:16:00   -21.638408
2018-03-20 08:17:00   -21.547834
2018-03-20 08:18:00   -21.606655
2018-03-20 08:19:00   -21.674846
2018-03-20 08:20:00   -21.728983
2018-03-20 08:21:00   -22.026737
2018-03-20 08:22:00   -21.530134
2018-03-20 08:23:00   -21.430710
2018-03-20 08:24:00   -21.530134
2018-03-20 08:25:00   -21.471833
2018-03-20 08:26:00   -21.473395
2018-03-20 08:27:00   -21.505669
2018-03-20 08:28:00   -21.530655
2018-03-20 08:29:00   -21.654545
2018-03-20 08:30:00   -21.902847
2018-03-20 08:31:00   -21.411970
                         ...    
2018-03-24 13:33:00   -22.319808
2018-03-24 13:34:00   -22.272957
2018-03-24 13:35:00   -22.338546
2018-03-24 13:36:00   -22.242244
2018-03-24 13:37:00   -22.299506
2018-03-24 13:38:00   -22.181342
2018-03-24 13:39:00   -22.219341
2018-03-24 13:40:00   -22.281286
2018-03-24 13:41:00   -22.399453
2018-03-24 13:42:00   -22.049120
2018-03-24 13:43:00   -22.283889
2018-03-24 13:44:00   -22.187066
2018-03-24 13:45:00   -22.335423
2018-03-24 13:46:00   -22.140218
2018-03-24 13:47:00   -21.938244
2018-03-24 13:48:00   -22.055889
2018-03-24 13:49:00   -22.297942
2018-03-24 13:50:00   -22.189148
2018-03-24 13:51:00   -21.996024
2018-03-24 13:52:00   -21.985094
2018-03-24 13:53:00   -21.996544
2018-03-24 13:54:00   -21.933560
2018-03-24 13:55:00   -21.933558
2018-03-24 13:56:00   -22.435889
2018-03-24 13:57:00   -22.093367
2018-03-24 13:58:00   -22.051723
2018-03-24 13:59:00   -22.291698
2018-03-24 14:00:00   -22.351040
2018-03-24 14:01:00   -22.006435
2018-03-24 14:02:00   -22.007475

在這種情況下,我期望這樣的ans:

2018-03-20 08:02:00   -21.4889   (This is mean over 30 min)
2018-03-24 13:33:00   -22.2946   (This is mean over 5 min)
2018-03-24 13:38:00   -22.2261
2018-03-24 13:43:00   -22.177

有任何內置功能可解決此問題嗎?

讓我們嘗試一下:

df = df.set_index(0)

g = df[1].lt(-22).mul(1).diff().bfill().ne(0).cumsum()

df.groupby(g).apply(lambda x: x.resample('5T', kind='period').mean().reset_index()
                           if (x.iloc[0] < -22).any() else 
                              x.resample('30T', kind='period').mean().reset_index())\
   .reset_index(drop=True)

輸出:

                  0          1
0  2018-03-20 08:02 -21.431450
1  2018-03-20 08:21 -22.026737
2  2018-03-20 08:22 -21.544189
3  2018-03-24 13:33 -22.294612
4  2018-03-24 13:38 -22.226108
5  2018-03-24 13:43 -22.236649
6  2018-03-24 13:47 -21.938244
7  2018-03-24 13:48 -22.180993
8  2018-03-24 13:51 -21.968956
9  2018-03-24 13:56 -22.244743
10 2018-03-24 14:01 -22.006955

暫無
暫無

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

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