Как применить дальний поиск к пандам? - PullRequest
1 голос
/ 24 октября 2019

У меня есть следующий фрейм данных

Name   X 
Jack   2
Ann    4
John   18

и следующая таблица поиска

X_Min X_Max Y
      2     2
3     7     4
8     15    9
16          25

Какие X_Min и X_Max - это диапазон значений поиска X в первом фрейме данных,Я хотел бы применить таблицу поиска к моему фрейму данных, чтобы получить результат ниже

Name   X    Y(Targeted)
Jack   2    2
Ann    4    4
John   18   25

Большое спасибо

1 Ответ

2 голосов
/ 24 октября 2019

Используйте 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]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...