为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 数据框进行高级重采样

使用 Pandas 数据框进行高级重采样

明月笑刀无情 2021-06-07 21:58:48
我有 1 分钟的间隔数据。对于同一系列,我想重新采样为两个频率,一个是 30 分钟(粗分辨率),另一个是 5 分钟(精细分辨率)。有粗略和精细分辨率数据的条件,如果数据超过阈值(在本例中为-22),则应在 5 分钟重新采样,否则应在 30 分钟重新采样。我在下面有一个示例数据集:在这种情况下,我的阈值为 -22,如果值小于 -22,则以精细分辨率(5 分钟)重新采样,否则以粗分辨率(30 分钟)重新采样2018-03-20 08:02:00   -21.3442992018-03-20 08:03:00   -21.3036972018-03-20 08:04:00   -21.2459162018-03-20 08:05:00   -21.3281622018-03-20 08:06:00   -21.2964092018-03-20 08:07:00   -21.3187932018-03-20 08:08:00   -21.2594502018-03-20 08:09:00   -21.3463822018-03-20 08:10:00   -21.4244632018-03-20 08:11:00   -21.4666282018-03-20 08:12:00   -21.4083262018-03-20 08:13:00   -21.3469022018-03-20 08:14:00   -21.3744912018-03-20 08:15:00   -21.5369022018-03-20 08:16:00   -21.6384082018-03-20 08:17:00   -21.5478342018-03-20 08:18:00   -21.6066552018-03-20 08:19:00   -21.6748462018-03-20 08:20:00   -21.7289832018-03-20 08:21:00   -22.0267372018-03-20 08:22:00   -21.5301342018-03-20 08:23:00   -21.4307102018-03-20 08:24:00   -21.5301342018-03-20 08:25:00   -21.4718332018-03-20 08:26:00   -21.4733952018-03-20 08:27:00   -21.5056692018-03-20 08:28:00   -21.5306552018-03-20 08:29:00   -21.6545452018-03-20 08:30:00   -21.9028472018-03-20 08:31:00   -21.411970                         ...    2018-03-24 13:33:00   -22.3198082018-03-24 13:34:00   -22.2729572018-03-24 13:35:00   -22.3385462018-03-24 13:36:00   -22.2422442018-03-24 13:37:00   -22.2995062018-03-24 13:38:00   -22.1813422018-03-24 13:39:00   -22.2193412018-03-24 13:40:00   -22.2812862018-03-24 13:41:00   -22.3994532018-03-24 13:42:00   -22.0491202018-03-24 13:43:00   -22.283889在这种情况下,我期望这样的答案: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.22612018-03-24 13:43:00   -22.177这个问题有什么内置功能吗?
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

让我们试试这个:


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


查看完整回答
反对 回复 2021-06-15
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号