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