【问题标题】:How to create time_mask with two conditions in Python如何在 Python 中创建具有两个条件的 time_mask
【发布时间】:2022-08-19 21:44:57
【问题描述】:

我需要绘制在某个时间开始和结束的数据,在此旁边我需要在那个时间段内排除周末的一段时间。

如何创建具有两条规则的数据的 time_mask?

我已经为 \"Start\" 和 \"End\" 时段创建了代码,但我无法添加排除 \"Weekend period\" 的规则。

#create a time_mask
start_date       = \'2022-06-30 15:26:00\'
end_date         = \'2022-07-11 15:30:00\'
weekend_end      = \'2022-07-08 14:30:00\'
weekend_start    = \'2022-07-11 09:50:00\'

time_mask        = (df[\'Time\'] > start_date) & (df[\'Time\'] <= end_date)


# use only this part of the dataframe as training data

df1_train        = df1.loc[time_mask]

我试图用下面的代码排除“周末时段”,但这不起作用......

time_mask        = ((df[\'Time\'] > start_date) & (df[\'Time\'] <= end_date) & ((df[\'Time\'] < weekend_start) or (df[\'Time\'] > weekend_end)))

我已经解决了一部分的问题。但现在在我的情节中,不排除这个时期:

Plot

Plot in operating hours

    标签: python dataframe datetime time


    【解决方案1】:
    import pandas as pd
    
    start_date = '2022-06-30 15:26:00'
    end_date = '2022-07-11 15:30:00'
    weekend_end = '2022-07-08 14:30:00'
    weekend_start = '2022-07-11 09:50:00'
    
    df = pd.DataFrame({'Time': ['2022-06-25 15:26:00', '2022-06-30 15:26:00', '2022-07-03 15:30:00', '2022-07-04 15:30:00',
                                '2022-07-05 15:30:00', '2022-07-08 14:30:00', '2022-07-10 14:30:00', '2022-07-11 09:50:00',
                                '2022-07-12 09:50:00']})
    
    
    df['Time'] = pd.to_datetime(df['Time'])
    time_mask = ((df['Time'] > start_date) & (df['Time'] <= end_date) & (
                    (df['Time'] > weekend_start) | (df['Time'] < weekend_end)))
    
    print(df[time_mask])
    

    使用“|”而不是或。 在我看来,您将周末结束与周末开始混淆了,因为开始是较晚的日期,而结束则相反,较早。 按条件过滤后:

    (df['Time'] > start_date) & (df['Time'] <= end_date)
    

    数据再次按大于周末开始的时间过滤:

    (df['Time'] > weekend_start)
    

    或时间少于周末结束:

    (df['Time'] < weekend_end)
    

    即不包括从 2022-07-08 14:30:00 到 2022-07-11 09:50:00 的时间段。

    输出

                     Time
    2 2022-07-03 15:30:00
    3 2022-07-04 15:30:00
    4 2022-07-05 15:30:00
    

    【讨论】:

    • 排除周末期间仍然不适用于您的代码......
    • @ecc98 假期什么时候开始,什么时候结束(你会在开始之前结束吗)?请澄清这一点。或者这两个时期是否有休息日?
    • 我会尽力解释。 df['Time'] >weekend_end 意味着如果没有 df['Time'] <weekend_start,时间会运行得更多。也就是说,条件 df['Time'] <weekend_start 会覆盖 df['Time'] >weekend_end,时间总是小于weekend_start。
    • 好,我懂了。但是是否有另一种方法可以在定义的时间掩码内排除该时间段?
    • @ecc98 更新答案,检查。周末开始对你来说是周末的结束吗?
    猜你喜欢
    • 2014-11-23
    • 2020-08-07
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2020-02-04
    • 2020-10-24
    • 2013-04-05
    • 2020-03-17
    相关资源
    最近更新 更多