我有两个数据框:df1
和df2
。
我想在这些组合的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']))
答案 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