Используйте IntervalIndex
с заменой первого не определенного значения на -inf
в X_Min
и последнего X_Max
пропущенного значения для np.inf
:
print (df2)
X_Min X_Max Y
0 NaN 2.0 2
1 3.0 7.0 4
2 8.0 15.0 9
3 16.0 NaN 25
i = pd.IntervalIndex.from_arrays(df2['X_Min'].fillna(-np.inf),
df2['X_Max'].fillna(np.inf), 'both')
print (i)
IntervalIndex([[-inf, 2.0], [3.0, 7.0], [8.0, 15.0], [16.0, inf]],
closed='both',
dtype='interval[float64]')
Возможнофильтруйте значения с помощью DataFrame.loc
:
df1['Y(Targeted)'] = df2.set_index(i).loc[df1['X'], 'Y'].values
print (df1)
Name X Y(Targeted)
0 Jack 2 2
1 Ann 4 4
2 John 18 25
РЕДАКТИРОВАТЬ:
Если хотите работать только со столбцом X_Max
:
i = pd.IntervalIndex.from_arrays(df2['X_Max'].add(1).shift().fillna(-np.inf),
df2['X_Max'].fillna(np.inf), 'both')
print (i)
IntervalIndex([[-inf, 2.0], [3.0, 7.0], [8.0, 15.0], [16.0, inf]],
closed='both',
dtype='interval[float64]')