【问题标题】:Pandas query time range - update values inside queryPandas 查询时间范围 - 更新查询中的值
【发布时间】:2023-02-22 18:16:38
【问题描述】:

我有以下数据框:

   start_time_1    end_time_1    start_time_2    end_time_2
1 
2  

我正在尝试在以下行上过滤 df:

df.query(
    "(start_time_1 <= start_time_2 <= end_time_1) or "
    "(start_time_2 <= start_time_1 <= end_time_2)"
)

此查询运行良好,但当我尝试将时间范围扩大 10 秒时,我遇到了困难。这是我尝试过的并且确实有效:

df.query(
    "(start_time_1-timedelta(seconds=10) <= start_time_2 <= end_time_1+timedelta(seconds=10)) or "
    "(start_time_2-timedelta(seconds=10) <= start_time_1 <= end_time_2+timedelta(seconds=10))"
)

关于如何执行此查询的任何建议?

【问题讨论】:

  • it doest work 是什么意思?能否添加一些示例数据来提问?

标签: python pandas


【解决方案1】:

您可以使用 pd.Timedelta 并通过 loc 函数进行过滤:

newdf = df.loc[(df['start_time_1'] + pd.Timedelta(seconds=10)) < df['start_time_2']]

【讨论】:

    【解决方案2】:

    尝试使用外部变量:

    from datetime import timedelta
    
    t = timedelta(seconds=10)
    
    df.query(
        "(start_time_1-@t <= start_time_2 <= end_time_1+@t) or "
        "(start_time_2-@t <= start_time_1 <= end_time_2+@t)"
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-30
      • 2021-08-17
      • 2015-06-06
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多