如何在pandas中,找出兩個dataframe不同的行?
可以自己define 一個function:
# Define the anti-join
def anti_join(x, y, on):
“”“Return rows in x which are not present in y”“”
ans = pd。merge(left=x, right=y, how=‘left’, indicator=True, on=on)
ans = ans。loc[ans。_merge == ‘left_only’, :]。drop(columns=‘_merge’)
return ans
df。set_index([‘title’,‘name’])[~df。set_index([‘title’,‘name’])。isin(df2。set_index([‘title’,‘name’]))。all(1)]。reset_index()
左右關聯,關聯結果為空的就是答案,沒有內建函式,需要拆解步驟。
df1 = pd。concat([df1, df2])
df1。drop_duplicates(keep=False, inplace=True)
但是如果列裡面元素有list的話會報錯——TypeError: unhashable type: ‘list’。
如果確定沒有重複元素,可以轉成tuple,最後再轉成list
df[‘text’] = df[‘text’]。apply(lambda x: tuple(x))
有重複元素就不知道改怎麼辦了。
可以參考我的答案,程式碼如下:
slice_lable
=
(
df1
[[
‘title’
,
‘name’
]]
。
apply
(
tuple
,
axis
=
1
)
。
isin
(
df2
[[
‘title’
,
‘name’
]]
。
apply
(
tuple
,
axis
=
1
)
。
to_list
()
)
)
# 在 df1 中存在,df2 中不存在的
df1
[
~
slice_lable
]
可以看我的案例解析:
Pandas 根據多列判斷不在其他表的資料