Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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
Python 提取两个数据帧之间相同的切片_Python_Pandas_Dataframe - Fatal编程技术网

Python 提取两个数据帧之间相同的切片

Python 提取两个数据帧之间相同的切片,python,pandas,dataframe,Python,Pandas,Dataframe,如何组合2个数据帧df1和df2,以获得df3,其中df1行和df2行具有相同的索引(以及列中的相同值) 测试1 测试2 预期输出测试1 预期输出测试2 首先,得到指数的交集。接下来,找到所有列都相同的所有行,然后索引到任一数据帧中 idx = df1.index & df2.index df_out = df1.loc[(df1.loc[idx] == df2.loc[idx]).all(1).index] print(df_out) 您还可以使用df.isin(与其他答案略有不同

如何组合2个数据帧
df1
df2
,以获得
df3
,其中
df1
行和
df2
行具有相同的索引(以及列中的相同值)

测试1 测试2 预期输出测试1 预期输出测试2
首先,得到指数的交集。接下来,找到所有列都相同的所有行,然后索引到任一数据帧中

idx = df1.index & df2.index
df_out = df1.loc[(df1.loc[idx] == df2.loc[idx]).all(1).index]

print(df_out)
您还可以使用
df.isin
(与其他答案略有不同):


测试1

    A   B   C   D
0  A0  B0  C0  D0
2  A2  B2  C2  D2
7  A7  B7  C7  D7
    A   B   C   D
0  A0  B0  C0  D0
2  A2  B2  C2  D2
7  A7  B7  C7  D7
测试2

Empty DataFrame
Columns: [A, B, C, D]
Index: []
Out[28]: 
Empty DataFrame
Columns: [A, B, C, D]
Index: []

我相信这是一个更具吸引力的解决方案:

df1[df2.isin(df1)].dropna()
给出:

这会将每个数据帧的索引添加为一列,然后连接所有列(现在包括索引),然后将索引设置回原始值。

或者您可以尝试此操作

用于测试1

df1['index']=df1.index
df2['index']=df2.index
df1['Mark']=df1.apply(lambda x : ' '.join(x.astype(str)),axis=1)
df2['Mark']=df2.apply(lambda x : ' '.join(x.astype(str)),axis=1)
df1[df1.Mark.isin(df2.Mark)].drop(['Mark','index'],1)


Out[20]: 
    A   B   C   D
0  A0  B0  C0  D0
2  A2  B2  C2  D2
7  A7  B7  C7  D7

用于测试2

Empty DataFrame
Columns: [A, B, C, D]
Index: []
Out[28]: 
Empty DataFrame
Columns: [A, B, C, D]
Index: []

是的,一个选项可以是使用concat,但它不检查值。我们的答案有用吗?
df1[df2.isin(df1)].dropna()
    A   B   C   D
0  A0  B0  C0  D0
2  A2  B2  C2  D2
7  A7  B7  C7  D7
pd.merge(df1.reset_index(), df2.reset_index()).set_index('index')
df1['index']=df1.index
df2['index']=df2.index
df1['Mark']=df1.apply(lambda x : ' '.join(x.astype(str)),axis=1)
df2['Mark']=df2.apply(lambda x : ' '.join(x.astype(str)),axis=1)
df1[df1.Mark.isin(df2.Mark)].drop(['Mark','index'],1)


Out[20]: 
    A   B   C   D
0  A0  B0  C0  D0
2  A2  B2  C2  D2
7  A7  B7  C7  D7
Out[28]: 
Empty DataFrame
Columns: [A, B, C, D]
Index: []