Выберите строки фрейма данных многоуровневого индекса со значениями индекса, равными столбцам в другом фрейме данных в пандах - PullRequest
0 голосов
/ 19 сентября 2018

Имея два фрейма данных с многоуровневыми индексами в одном, представленном как столбцы в другом, идея состоит в том, чтобы выбрать те строки из первого, где значения индекса совпадают с соответствующими значениями столбца.

Пример

Имея следующие два фрейма данных df1 и df2:

df1 = pd.DataFrame({'i1': ['a1', 'a2', 'a3'], 'i2': ['b1', 'b2', 'b3'], 'c': [1, 2, 3]})
df1 = df1.set_index(['i1', 'i2'])

       c
i1 i2   
a1 b1  1
a2 b2  2
a3 b3  3


df2 = pd.DataFrame({'i1': ['a1', 'a3'], 'i2': ['b1', 'b3']})

   i1  i2
0  a1  b1
1  a3  b3

Выберите те строки df1, значения индекса которых i1 и i2 имеютте же значения, что и у столбцов i1 и i12 в df2, что приводит к:

       c
i1 i2   
a1 b1  1
a3 b3  3

1 Ответ

0 голосов
/ 19 сентября 2018

Используйте Index.isin с MultiIndex:

df = df1[df1.index.isin(df2.set_index(['i1','i2']).index)]

Альтернатива:

df = df1[df1.index.isin(pd.MultiIndex.from_arrays([df2['i1'], df2['i2']]))]

Или используйте merge, join - но необходимосбросить и установить индекс:

df = df1.reset_index().merge(df2).set_index(['i1', 'i2'])
df = df2.join(df1, on=['i1', 'i2'], how='inner').set_index(['i1', 'i2'])

print (df)
       c
i1 i2   
a1 b1  1
a3 b3  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...