#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)