Pandas 基于一个数据帧中的多索引和另一个数据帧中的列,从两个数据帧创建两个数据帧
我不确定以前是否回答过这个问题。但我的要求是 我有这样一个数据帧:Pandas 基于一个数据帧中的多索引和另一个数据帧中的列,从两个数据帧创建两个数据帧,pandas,dataframe,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 b
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()
来实现这一点,但效率不高。寻找矢量化的解决方案。谢谢。让我们用合并
df3=df1.reset_index().merge(df2).set_index(['I1','I2'])
df4=df1.drop(df3.index)
或
为了记录另一种方式,发布以下内容:
我可以使用[I1,I2]
在df2
上设置索引,然后执行isin
操作,如:
is\u index\u there=df1.index.isin(df2.set\u index([I1,I2]).index)
然后使用它创建单独的dfs,如:
df3=df1.loc[那里有索引==True]
df4=df2.loc[is\u index\u there==False]
谢谢,我要检查一下。另一方面,在第一种方法中,我得到了类型为[I1,[I21,I22]]
的多索引,如何将其展平为[I1,I21]
,[I1,I22]
?@check-itertools产品?
idx=pd.MultiIndex.from_frame(df2)
df3=df1.reindex(idx).dropna()
df4=df1.drop(df3.index)