代码之家  ›  专栏  ›  技术社区  ›  user9238790

在熊猫数据框中搜索列

  •  1
  • user9238790  · 技术社区  · 8 年前

    以下是 user_time 作为输入。并返回实际时间(如果在 df['time'] 或返回最接近的时间,无论它是指定秒数的+1还是-1。范围不超过+120秒。因此,如果它不在120秒内,那么它就不存在。

    #Following Format always 'yyyy-mm-dd hh:mm:ss' 
    user_time = '2018-04-10 13:00:03'
    
    
    if user_time not in df['time']:
    
            closest_time = 
            #df.loc[df['time'].str.contains(closest_time )]
    

    如果实际时间不存在,我不知道如何找到最接近的时间将其传递给函数并打印出该行

    2 回复  |  直到 8 年前
        1
  •  2
  •   shivsn    8 年前

    这应该可以正常工作:

    In [38]: sd = pd.DataFrame({'date':pd.date_range('2018-01-01 00:00:00','2018-01-5 00:00:00',freq='min')})
    
    In [39]: sd['date'] = pd.to_datetime(sd['date'])
    
    In [41]: sd.iloc[(sd['date'] - pd.to_datetime('2018-01-03 01:12:23')).abs().argsort()][:1]
    Out[41]: 
                        date
    2952 2018-01-03 01:12:00
    

    In [50]: sd.iloc[(sd['date'] - pd.to_datetime('2018-01-03 01:12:23')).abs().argmin()]
    Out[50]: 
    date   2018-01-03 01:12:00
    Name: 2952, dtype: datetime64[ns]
    
        2
  •  1
  •   Ami Tavory    8 年前

    说你从

    df = pd.DataFrame({
        't': pd.to_datetime(['2018-04-10 13:00:03', '2018-04-10 14:00:03'])})
    

    然后

    (df.t - pd.to_datetime('2018-04-10 23:00:03')).dt.total_seconds().abs().argmin()
    

    查找绝对值与某个时间相差秒数的行的索引( '2018-04-10 23:00:03' )是最小的。

    • (df.t - pd.to_datetime('2018-04-10 23:00:03')) 查找时间的差异。
    • dt.total_seconds() 转换总秒数的差值。
    • abs() 取绝对值。
    • argmin() 返回最小值的索引。

    感谢@MaxU的改进!