Я ожидаю, что индексирование одной серии за другой приведет к появлению новой серии, индекс которой будет таким же, как индексирование серии.Однако вместо этого он является комбинацией индекса индексируемой и индексирующей серии.
Running
A = pandas.Series(range(3), index=list("ABC"))
B = pandas.Series(list("AABBCC"), index=list("XYZWVU"))
print(A[B])
дает
A 0
A 0
B 1
B 1
C 2
C 2
dtype: int64
Таким образом, индекс здесь имеет формуB.index
, но значения A.index
.
Вместо этого я бы ожидал, что индекс для A[B]
будет идентичен B.index
, как если бы он составлял два отображения.Почему это не так?Есть ли польза от текущей настройки (которая мне кажется бесполезной)?Есть ли «правильный» способ получить то, что я ищу?
Эта проблема усложняет некоторые операции.Например,
B[A[B] == 2]
будет интуитивно понятно, как выбрать записи B, значения которых дают 2 при поиске их в A. (Это полезно, если B - это DataFrame с некоторыми идентификаторами объектов в одном столбце имы хотим выбрать строки B на основе значения этого объекта, хранящегося во вторичной таблице.) Однако это приводит к исключению ValueError: cannot reindex from a duplicate axis
.Это работает, если вы сбрасываете индекс:
B[(A[B] == 2).values]
Используете ли .values
правильный способ сделать это или есть лучший способ?