基于一个数据帧中的multiindex和另一个数据帧中的列,从两个数据帧中创建两个数据帧

时间:2020-05-31 02:00:36

标签: pandas dataframe

我不确定之前是否已经回答过。但我的要求是 我有一个像这样的数据框:

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()来做到这一点,但是效率不高。寻找向量化的解决方案。谢谢。

2 个答案:

答案 0 :(得分:1)

让我们尝试reset_indexmerge

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_indexdf2[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]

相关问题