使用数据帧的高级重采样

2024-06-06 13:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有1分钟的间隔数据。我想重新采样到两个频率一个在30分钟(粗分辨率)和其他在5分钟(精细分辨率)为同一系列。具有粗分辨率和细分辨率数据是有条件的,如果数据超过阈值(本例中为-22),则应在5分钟时重新采样,否则应在30分钟时重新采样。下面是一个示例数据集:

在这种情况下,我的阈值是-22,如果值小于-22,则以精细分辨率(5min)重新采样,否则以粗略分辨率(30min)重新采样

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

在这种情况下,我希望答案是这样的:

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

这个问题有什么内置功能吗?你知道吗


Tags: 数据示例间隔is分辨率情况阈值min
1条回答
网友
1楼 · 发布于 2024-06-06 13:22:17

让我们试试这个:

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

相关问题 更多 >