pandas 集計結果等の差分比較のためのanti merge

スポンサーリンク

2つのテーブルを比較する際、SQLならexcept distinctがある。
類似の処理でPandasならcompareがあるが、これは行数と列数が完全に一致してないとダメ。
Pythonで2つのDataFrameを比較して、違うところだけを確認したい!
というときが面倒くさかったので、以下のような関数を拝借してきて使用。

joinしてみてjoinできなかったものを残すといった感じ。
他の言語でも「anti join」とかをキーワードにして探すと見つかる。

def anti_join(x, y, on):
  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

def anti_join_all_cols(x, y):
  assert set(x.columns.values) == set(y.columns.values)
  return anti_join(x, y, x.columns.tolist())
タイトルとURLをコピーしました