首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:找到正确的时间窗口

熊猫:找到正确的时间窗口
EN

Stack Overflow用户
提问于 2021-06-17 07:04:20
回答 1查看 34关注 0票数 0

我有一只熊猫的数据,每小时更新一次。我必须根据阈值筛选出ID,即PR_Rate > 50和CNT_12571 < 30,从5小时的回溯周期开始,连续过滤3个小时。我使用以下语句来完成这一任务:

代码语言:javascript
复制
df_thld=df[(df['Date'] > df['Date'].max() - pd.Timedelta(hours=5))& (df.PR_Rate>50) & (df.CNT_12571 < 30)]
df_thld.loc[:,'HR_CNT'] = df_thld.groupby('ID')['Date'].nunique().to_frame('HR_CNT').reset_index() 
df_thld[(df_thld['HR_CNT'] >3] 

这种方法的问题是,由于回溯周期要求为5小时,因此,此HR_CNT可以计算任何非连续小时违反这一临界性。我的数据集如下:DataFrame

代码语言:javascript
复制
Date               IDs  CT_12571    PR_Rate
16/06/2021 10:00    A1  15      50.487
16/06/2021 11:00    A1  31      40.806
16/06/2021 12:00    A1  25      52.302
16/06/2021 13:00    A1  13      61.45
16/06/2021 14:00    A1  7       73.805

在上面的Dataframe中,在1100小时时没有违反门槛,但在计算时间时,10,12和13小时是突破门槛的小时,而不是按要求计算的12,13,14小时。每一个身份都可能在一天内被破坏,也可能没有。知道吗,我怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 14:43:19

请原谅,如果我误解了你的问题。正如我所理解的问题,您有一个每小时更新的数据。下面以df的形式说明了此数据的一个示例。从这个dataframe中,您只希望过滤那些满足以下两个条件的行:

  1. PR_Rate > 50和CNT_12571 < 30
  2. 当且仅当连续三个小时超过阈值

基于这些假设,我将按以下方式进行:

df:

代码语言:javascript
复制
Date    IDs CT_1257 PR_Rate
0   2021-06-16 10:00:00 A1  15  50.487
1   2021-06-16 12:00:00 A1  31  40.806
2   2021-06-16 14:00:00 A1  25  52.302
3   2021-06-16 15:00:00 A1  13  61.450
4   2021-06-16 16:00:00 A1  7   73.805

注意,在此数据中,唯一满足上述条件的时间fr5ame是14:00、15:00和16:00的条目。

代码语言:javascript
复制
def filterFrame(df, dur, pr_threshold, ct_threshold):
    ff = df[(df['CT_1257']< ct_threshold) & (df['PR_Rate'] >pr_threshold) ].reset_index()
    ml = list(ff.rolling(f'{dur}h', on='Date').count()['IDs'])
    r = len(ml)- 1
    rows= []
    while r >= 0:       
        end = r
        start = None
        if int(ml[r]) < dur:         
            r -= 1
        else:
            k = int(ml[r])
            for i in range(k):
                rows.append(r-i)
            r -= k
    rows =  rows[::-1]
    return ff.filter(items= rows, axis = 0).reset_index()

运行filterFrame(df, 3, 50, 30)会产生:

代码语言:javascript
复制
   level_0  index   Date            IDs CT_1257 PR_Rate
    0   1   2   2021-06-16 14:00:00 A1  25  52.302
    1   2   3   2021-06-16 15:00:00 A1  13  61.450
    2   3   4   2021-06-16 16:00:00 A1  7   73.805  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68014463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档