首页 > 解决方案 > 如何在2个数据框之间的2列中找到具有相同值但在其他列pandas中具有不同值的行

问题描述

我有 2 个数据框,其样本值如下:

df1 :
col1 cold2 cold3 cold4
a     bb    cc    d
b     aa    ee    e


df2 :
col1 cold2 cold3 col4
a    ee    ff    d
e    gg    hh    k

我想找到 2 个数据框中的所有行在 col1+col4 中具有相同的值,但在 col2 或 col3 中具有不同的值

输出应该是这样的:

df3:
col1 cold2 cold3 cold4
a     bb    cc    d
a     ee    ff    d

感谢帮助。

标签: pythonpandas

解决方案


我认为你可以使用:

#get all matched rows by columns
df = df1.merge(df2, on=['col1','col4'], suffixes=('','_'))
#filter for not matched  
df = df[df['col2'] != df['col3']]

#filter columns - same like df1
df1 = df[df1.columns]
#filter added new columns
df2 = df[df.columns.difference(df2.columns).union(['col1','col4'])]

#join together - rename values for align data 
df = pd.concat([df1, 
                df2.rename(columns=dict(zip(df2.columns, df1.columns)))],
                ignore_index=True)
print (df)
  col1 col2 col3 col4
0    a   bb   cc    d
1    a   ee   ff    d

推荐阅读