Вы близки, вам нужно tuples
для одной пары:
df.loc[('chicago', 'rome')]
Для проверки нескольких значений используйте Index.isin
с MultiIndex.get_level_values
:
m1 = df.index.get_level_values(0).isin(list_ofCities1)
m2 = df.index.get_level_values(1).isin(list_ofCities2)
df = df[m1 & m2]
Или Index.isin
со списком кортежей с boolean indexing
:
df = df.loc[df.index.isin(list(zip(list_ofCities1, list_ofCities2)))]
Образец :
df = pd.DataFrame({
'A':list('abcdec'),
'E':[5,3,6,9,2,4],
'F':list('aaabgg')
}).set_index(['A','F'])['E']
list_ofCities1 = list('abc')
list_ofCities2 = list('ang')
df = df[df.index.isin(list(zip(list_ofCities1, list_ofCities2)))]
print (df)
A F
a a 5
c g 4
Name: E, dtype: int64
Другая идея заключается в использовании Index.intersection
с loc
:
df = df.loc[df.index.intersection(list(zip(list_ofCities1, list_ofCities2)))]
print (df)
A F
a a 5
c g 4
Name: E, dtype: int64