From 8e6f6777176aa9c415ecf46e1a125e7d4aa81384 Mon Sep 17 00:00:00 2001 From: Lewis Davies Date: Wed, 22 Jul 2020 03:15:20 +0000 Subject: [PATCH 1/2] Add many-to-many merge validation check --- pandas/core/reshape/merge.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pandas/core/reshape/merge.py b/pandas/core/reshape/merge.py index 27b331babe692..0936b43fc21f7 100644 --- a/pandas/core/reshape/merge.py +++ b/pandas/core/reshape/merge.py @@ -1292,7 +1292,16 @@ def _validate(self, validate: str): ) elif validate in ["many_to_many", "m:m"]: - pass + if left_unique: + raise MergeError( + "Merge keys are unique in the left dataset;" + "not a many-to-many merge" + ) + elif right_unique: + raise MergeError( + "Merge keys are unique in the right dataset;" + "not a many-to-many merge" + ) else: raise ValueError("Not a valid argument for validate") From ebe7be9d95f3ee60fc55e86918978c7de5b7376d Mon Sep 17 00:00:00 2001 From: Lewis Davies Date: Wed, 22 Jul 2020 05:10:43 +0000 Subject: [PATCH 2/2] Extend checks to 1:m and m:1 merges --- pandas/core/reshape/merge.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pandas/core/reshape/merge.py b/pandas/core/reshape/merge.py index 0936b43fc21f7..4220be278572c 100644 --- a/pandas/core/reshape/merge.py +++ b/pandas/core/reshape/merge.py @@ -1283,6 +1283,10 @@ def _validate(self, validate: str): raise MergeError( "Merge keys are not unique in left dataset; not a one-to-many merge" ) + elif right_unique: + raise MergeError( + "Merge keys are unique in right dataset; not a one-to-many merge" + ) elif validate in ["many_to_one", "m:1"]: if not right_unique: @@ -1290,17 +1294,19 @@ def _validate(self, validate: str): "Merge keys are not unique in right dataset; " "not a many-to-one merge" ) + elif left_unique: + raise MergeError( + "Merge keys are unique in left dataset; not a many-to-one merge" + ) elif validate in ["many_to_many", "m:m"]: if left_unique: raise MergeError( - "Merge keys are unique in the left dataset;" - "not a many-to-many merge" + "Merge keys are unique in left dataset; not a many-to-many merge" ) elif right_unique: raise MergeError( - "Merge keys are unique in the right dataset;" - "not a many-to-many merge" + "Merge keys are unique in right dataset; not a many-to-many merge" ) else: