[英]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.