Python 提取两个数据帧之间相同的切片
如何组合2个数据帧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(与其他答案略有不同
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: []