Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/pandas/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 基于一个数据帧中的多索引和另一个数据帧中的列,从两个数据帧创建两个数据帧_Pandas_Dataframe - Fatal编程技术网

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)