有两个数据帧,其中一个多级索引在另一个列中显示为列,其想法是从第一行中选择那些索引值与相应列值相同的行。
示例
具有以下两个数据帧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
答案 0 :(得分:2)
将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