Pandas MultiIndex многомерное пересечение - PullRequest
1 голос
/ 14 марта 2020

У меня есть 2 Pandas Объекты серии, которые являются подмножеством общего многоиндексированного DF.
Пример:

// SeriesA = 
Session    Movie #  Point in Time
Session A  mov1     1932             0.300000
                    1934             0.133333
                    1936             0.166667
                    1938             0.316667

// SeriesB = 
Session    Movie #  Point in Time
Session A  mov1     1932             0.300000
                    1934             0.133333
                    1940             0.200000
                    1942             0.083333
                    1944             0.133333
Session B  mov1     1932             0.500000

Я пытаюсь извлечь строки, где все три индекса- уровни существуют как в SeriesA, так и в SeriesB.
Таким образом, для приведенных выше примеров правильный результат будет

expected = [('Session A', 'mov1', 1932), ('Session A', 'mov1', 1934)]

Я попытался использовать функции numy intersect1d () и pandas 'intersection (), но оба возвращают список кортежей, где каждый кортеж - это все существующие опции для одной из меток индекса, то есть

result = [('Session A', Session B'), ('mov1'), (1932, 1934, 1936, 1938, 1940, 1942, 1944)]

Я мог бы перебирать построчно, но это ОЧЕНЬ расточительно. Какие-нибудь магические решения, о которых я не знаю?

1 Ответ

0 голосов
/ 14 марта 2020

Я получил правильный вывод с Index.intersection:

a = SeriesA.index.intersection(SeriesB.index).tolist()
print (a)
[('Session A', 'mov1', 1932), ('Session A', 'mov1', 1934)]

Другая идея с merge:

c = ['Session','Movie #','Point in Time']
a = (SeriesA.reset_index()
            .merge(SeriesB.reset_index(), on=c)
            .set_index(c)
            .index
            .tolist())
print (a)
[('Session A', 'mov1', 1932), ('Session A', 'mov1', 1934)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...