1. ホーム
  2. python

[解決済み] Python Pandas - 2つのデータフレーム間の差分を見つける

2022-04-20 05:31:07

質問

2つのデータフレームdf1とdf2があり、df2はdf1のサブセットです。 2つのデータフレームの差である新しいデータフレーム(df3)を得るにはどうしたらよいでしょうか。

言い換えれば、df1にある行/列のうち、df2にないものをすべて含むデータフレームということでしょうか。

どのように解決するのか?

を使用することにより drop_duplicates

pd.concat([df1,df2]).drop_duplicates(keep=False)


Update :

The above method only works for those data frames that don't already have duplicates themselves. For example:

df1=pd.DataFrame({'A':[1,2,3,3],'B':[2,3,4,4]})
df2=pd.DataFrame({'A':[1],'B':[2]})

以下のように出力されますが、これは間違いです。

間違った出力:

pd.concat([df1, df2]).drop_duplicates(keep=False)
Out[655]: 
   A  B
1  2  3

正しい出力

Out[656]: 
   A  B
1  2  3
2  3  4
3  3  4


それを実現するにはどうしたらいいのか。

方法1:使用する isin をもって tuple

df1[~df1.apply(tuple,1).isin(df2.apply(tuple,1))]
Out[657]: 
   A  B
1  2  3
2  3  4
3  3  4

方法2. merge をもって indicator

df1.merge(df2,indicator = True, how='left').loc[lambda x : x['_merge']!='both']
Out[421]: 
   A  B     _merge
1  2  3  left_only
2  3  4  left_only
3  3  4  left_only