我不确定之前是否已经回答过。但我的要求是 我有一个像这样的数据框:
df1:
A B
I1 I2
x11 x12 a11 b11
x12 x22 a21 b21
请注意,它具有[I1, I2]
和列[A, B]
的多索引
,然后是另一个像这样的数据框:
df2:
I1 I2
0 x11 x12
1 y11 y12
该列具有[I1, I2]
列,与df1
的多索引相同。
现在我要创建的是两个数据帧,如下所示:
df3
的行与df1
中的索引与df2
中的列值相匹配
A B
a11 b11
df4
,其余为
A B
a21 b21
我知道如何使用iterrows()
来做到这一点,但是效率不高。寻找向量化的解决方案。谢谢。
答案 0 :(得分:1)
让我们尝试reset_index
与merge
df3=df1.reset_index().merge(df2).set_index(['I1','I2'])
df4=df1.drop(df3.index)
或
idx=pd.MultiIndex.from_frame(df2)
df3=df1.reindex(idx).dropna()
df4=df1.drop(df3.index)
答案 1 :(得分:0)
只需记录另一种操作方式,即可发布此信息:
我可以用set_index
在df2
上[I1, I2]
,然后像这样执行isin
:
is_index_there = df1.index.isin(df2.set_index([I1, I2]).index)
,然后使用它来创建单独的df,如:
df3 = df1.loc[is_index_there == True]
和
df4 = df2.loc[is_index_there == False]