Я не могу понять, почему этот поиск интервалов не дает мне того, что я ожидал, так как индекс 0 соответствует всем точкам данных в следующем примере:
import pandas
dfLbl = pandas.DataFrame( { 'Started':[554235706.051] , 'Stopped':[554240454.867] , 'Label':['LblVal'] } )
dfData = pandas.DataFrame( {'Angle': [-89.460618, -90.053987, -89.735639, -179.248331, 90.405555, 0.541808, 1.257457, 0.16111] ,
'time_s':[554237043.713062, 554238249.989954, 554235853.912149, 554237638.876251, 554237007.218903, 554239665.777394, 554238786.764156, 554239549.519223] })
print( "dfData\n{}".format( dfData ))
print( "\ndfLbl\n{}".format( dfLbl ))
lbl_intervals = pandas.IntervalIndex.from_arrays( dfLbl['Started'] , dfLbl['Stopped'] , closed='neither' )
lbl_indexes = lbl_intervals.get_indexer( dfData['time_s'] )
print( "\nlbl_intervals\n{}".format( lbl_intervals ))
print( "\nlbl_indexes\n{}".format( lbl_indexes ))
print( "\n{}".format( pandas.DataFrame( { 'a <= x': dfLbl.loc[0,'Started'] <= dfData['time_s'] , 'x < b' : dfData['time_s'] < dfLbl.loc[0,'Stopped']} ) ))
print( "\nIntervalWidth={}".format( dfLbl['Stopped'] - dfLbl['Started'] ))
Что дает следующий вывод консоли
dfData
Angle time_s
0 -89.460618 5.542370e+08
1 -90.053987 5.542382e+08
2 -89.735639 5.542359e+08
3 -179.248331 5.542376e+08
4 90.405555 5.542370e+08
5 0.541808 5.542397e+08
6 1.257457 5.542388e+08
7 0.161110 5.542395e+08
dfLbl
Label Started Stopped
0 LblVal 5.542357e+08 5.542405e+08
lbl_intervals
IntervalIndex([(554235706.051, 554240454.867)]
closed='neither',
dtype='interval[float64]')
lbl_indexes
[-1 -1 -1 -1 -1 -1 -1 -1]
a <= x x < b
0 True True
1 True True
2 True True
3 True True
4 True True
5 True True
6 True True
7 True True
IntervalWidth=0 4748.816
dtype: float64
Я полностью сбит с толку, поскольку, когда я вручную делаю неравенство, как вы видите в столбцах a <= x
и x < b
, это показывает, что данные time_s
находятся в границах. Я проверил ширину индексатора не каким-то необоснованно небольшим числом. Что еще может быть не так? Есть ли что-то ошибочное в использовании одного интервала для такой операции? Приводит ли панда значение к какому-либо другому типу, который что-то ломает?