Строка поиска во фрейме данных pandas

#pandas #lookup

#pandas #поиск

Вопрос:

У меня есть два фрейма данных (A и B). Для каждой строки в A я хотел бы посмотреть некоторую информацию, которая находится в B. Я пытался:

 A = pd.DataFrame({'X' : [1,2]},   index=[4,5])
B = pd.DataFrame({'Y' : [3,4,5]}, index=[4,5,6])

C = pd .DataFrame(A.index)
C .columns = ['I']
C['Y'] = B .loc[C.I, 'Y']
  

Я хотел ‘3, 4’, но получил ‘NaN’, ‘NaN’.

введите описание изображения здесь

Ответ №1:

Использовать A.join(B) .

Результатом является:

    X  Y
4  1  3
5  2  4
  

Объединение выполняется по индексу, а значение из B для ключа 5 отсутствует, поскольку A выполняет
не содержит этот ключ.

Ответ №2:

Что вам следует сделать, так это сделать index то же самое, pandas является index чувствительным, что означает, что они будут проверять индекс при выполнении назначения

 C = pd .DataFrame(A.index,index=A.index) # change here
C .columns = ['I']
C['Y'] = B .loc[C.I, 'Y']
C
Out[770]: 
   I  Y
4  4  3
5  5  4
  

Или просто измените свой код, добавив .values в конце

 C['Y'] = B .loc[C.I, 'Y'].values
  

Поскольку вы упомянули поиск, давайте используем lookup

 C['Y']=B.lookup(C.I,['Y']*len(C))
#Out[779]: array([3, 4], dtype=int64)