根据两列确定两个熊猫数据框之间共享的行

时间:2019-09-16 22:07:42

标签: python pandas

有关:How to find row with same value in 2 columns between 2 dataframes but different values in other columns pandas

我有两个数据框:df1df2

我想在这些组合的DataFrame中找到在'columnA'(对象)和'columnB'(整数)中具有相同值的所有行。这些行在其他我不关心的列中将具有不同的值。这些DataFrame的形状也不同。

我尝试过类似的事情:

concat = pd.concat([df1, df2])
overlap = concat[concat.duplicated(subset=['columnA','columnB'], keep=False)]

但是输出看起来不正确(也许正确)。只是想检查-我错过了什么吗?

修改:

说我想要columnA中所有具有相同值但columnB中具有不同值的行-这样行得通吗?

df3 = (concat[concat.duplicated(subset=['columnA'], keep=False)]
           .drop_duplicates(subset=['columnB']))

1 个答案:

答案 0 :(得分:1)

您可以使用pd.merge

df1 = pd.DataFrame(data=[('A','B','C'),('E','F','G'),('A','B','F')], columns=['columnA','columnB','columnC'])
df2 = pd.DataFrame(data=[('X','Y','G'),('A','B','Y'),('A','C','F')], columns=['columnA','columnB','columnC'])

df2['columnB'] = df2['columnB'].astype(str) #convert to string

print(df1)
  columnA columnB columnC
0       A       B       C
1       E       F       G
2       A       B       F

print(df2)
 columnA columnB columnC
0       X       Y       G
1       A       B       Y
2       A       C       F

然后应用pd.merge之后:

df_m = pd.merge(df1,df2,how='inner',on='columnA')

----
df_m
  columnA columnB_x columnC_x columnB_y columnC_y
0       A         B         C         B         Y
1       A         B         C         C         F
2       A         B         F         B         Y
3       A         B         F         C         F

关于您的编辑,请尝试以下操作:

df_final = df_m[df_m['columnB_x'] != df_m['columnB_y']]

------
print(df_final)
  columnA columnB_x columnC_x columnB_y columnC_y
1       A         B         C         C         F
3       A         B         F         C         F