过滤多个 between_time 和 ID 条件

Posted

技术标签:

【中文标题】过滤多个 between_time 和 ID 条件【英文标题】:Filtering Multiple between_time and ID condition 【发布时间】:2019-01-30 20:26:23 【问题描述】:

我知道这些工具在特定时间范围内会发生一些事件,不幸的是,这些事件发生在不同工具的不同时间范围内。我正在努力将数据过滤到 2-3 小时的时间范围内,以便量化改进并在修复前后进行比较。我知道我们可以使用 pandas between_time 根据时间过滤数据,但是,我不确定如何通过 eqp_id 和不同的时间范围过滤数据。我正在做的是一种有点粗略的方法,如果你们中的任何人对我的问题有更好和有效的解决方案,我将不胜感激。

dmv2361=report1[report1['Eqp_ID'] == 'dmv2361']
df_2361=ALC2361.between_time('01:30', '04:30')

dmv2362=report1[report1['Eqp_ID'] == 'dmv2362']
df_2362=ALC2362.between_time('03:30', '06:30')

dmv2363=report1[report1['Eqp_ID'] == 'dmv2363']
dmv2363=ALC2363.between_time('05:30', '08:30')

I am expecting something like this or better way

alc= report1[report1["Eqp_ID"].isin(['dmv2360', 'dmv2361', 'dmv2362', 'dmv2363', 'dmv2370', 'dmv2371', 'dmv2372', 'dmv2373', 'dmv2374'])].sort_values(by='Start_Date', ascending=True). between_time('23:30-02:30', '01:30-04:30', 'so on') 

【问题讨论】:

【参考方案1】:

您可以使用 indexer_between_time 在单个 loc 中执行此操作:

report1[(report1['Eqp_ID'] == 'dmv2361') && report1.index.indexer_between_time('01:30', '04:30')]

注意:这就是 between_time 的内部名称。

【讨论】:

alc=report1[report1["Eqp_ID"].isin(['dmv2360', 'dmv2361', 'dmv2362', 'dmv2363', 'dmv2370', 'dmv2371', 'dmv2372', 'dmv2373', 'dmv2374'])].sort_values(by='Start_Date', 升序=True)。 between_time('23:30-02:30', '01:30-04:30', '等等') 这就是我所期待的。我不确定它是否可能

以上是关于过滤多个 between_time 和 ID 条件的主要内容,如果未能解决你的问题,请参考以下文章

和/或具有满足多个条件的单因素水平的条件过滤

在 Oracle DBMS 中的多个列上使用过滤条件连接表

通过在嵌套的对象数组中查找多个条件来过滤数组

如何在 PySpark 中复制 Pandas 的 between_time 函数

如何将不符合WHERE条件的联接表中的数据包含为空值(SQL)

使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器