Python 选择多级索引数据框的行,其索引值等于表中另一个数据框中的列

Python 选择多级索引数据框的行,其索引值等于表中另一个数据框中的列,python,pandas,dataframe,select,Python,Pandas,Dataframe,Select,有两个数据帧,其中一个中的多级索引作为列显示在另一个中,其思想是从索引值与相应列值相同的第一个数据帧中选择那些行 范例 具有以下两个数据帧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 d

有两个数据帧,其中一个中的多级索引作为列显示在另一个中,其思想是从索引值与相应列值相同的第一个数据帧中选择那些行

范例

具有以下两个数据帧
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
选择索引值
i1
i2
df2
中的列
i1
i12
具有相同值的
df1
行,从而导致:

       c
i1 i2   
a1 b1  1
a3 b3  3
与多索引一起使用:

df = df1[df1.index.isin(df2.set_index(['i1','i2']).index)]
备选方案:

df = df1[df1.index.isin(pd.MultiIndex.from_arrays([df2['i1'], df2['i2']]))]
或者使用
合并
加入
-但需要重置和设置索引:

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