@@ -92,21 +92,17 @@ def merge(
92
92
merge .__doc__ = _merge_doc % "\n left : DataFrame"
93
93
94
94
95
- def _groupby_and_merge (
96
- by , on , left , right : "DataFrame" , _merge_pieces , check_duplicates : bool = True
97
- ):
95
+ def _groupby_and_merge (by , on , left : "DataFrame" , right : "DataFrame" , merge_pieces ):
98
96
"""
99
97
groupby & merge; we are always performing a left-by type operation
100
98
101
99
Parameters
102
100
----------
103
101
by: field to group
104
102
on: duplicates field
105
- left: left frame
106
- right: right frame
107
- _merge_pieces: function for merging
108
- check_duplicates: bool, default True
109
- should we check & clean duplicates
103
+ left: DataFrame
104
+ right: DataFrame
105
+ merge_pieces: function for merging
110
106
"""
111
107
pieces = []
112
108
if not isinstance (by , (list , tuple )):
@@ -118,18 +114,6 @@ def _groupby_and_merge(
118
114
# if we can groupby the rhs
119
115
# then we can get vastly better perf
120
116
121
- # we will check & remove duplicates if indicated
122
- if check_duplicates :
123
- if on is None :
124
- on = []
125
- elif not isinstance (on , (list , tuple )):
126
- on = [on ]
127
-
128
- if right .duplicated (by + on ).any ():
129
- _right = right .drop_duplicates (by + on , keep = "last" )
130
- # TODO: use overload to refine return type of drop_duplicates
131
- assert _right is not None # needed for mypy
132
- right = _right
133
117
try :
134
118
rby = right .groupby (by , sort = False )
135
119
except KeyError :
@@ -151,16 +135,13 @@ def _groupby_and_merge(
151
135
pieces .append (merged )
152
136
continue
153
137
154
- merged = _merge_pieces (lhs , rhs )
138
+ merged = merge_pieces (lhs , rhs )
155
139
156
140
# make sure join keys are in the merged
157
- # TODO, should _merge_pieces do this?
141
+ # TODO, should merge_pieces do this?
158
142
for k in by :
159
- try :
160
- if k in merged :
161
- merged [k ] = key
162
- except KeyError :
163
- pass
143
+ if k in merged :
144
+ merged [k ] = key
164
145
165
146
pieces .append (merged )
166
147
@@ -287,16 +268,11 @@ def _merger(x, y):
287
268
raise ValueError ("Can only group either left or right frames" )
288
269
elif left_by is not None :
289
270
result , _ = _groupby_and_merge (
290
- left_by , on , left , right , lambda x , y : _merger (x , y ), check_duplicates = False
271
+ left_by , on , left , right , lambda x , y : _merger (x , y )
291
272
)
292
273
elif right_by is not None :
293
274
result , _ = _groupby_and_merge (
294
- right_by ,
295
- on ,
296
- right ,
297
- left ,
298
- lambda x , y : _merger (y , x ),
299
- check_duplicates = False ,
275
+ right_by , on , right , left , lambda x , y : _merger (y , x )
300
276
)
301
277
else :
302
278
result = _merger (left , right )
@@ -1605,11 +1581,6 @@ def _validate_specification(self):
1605
1581
if self .direction not in ["backward" , "forward" , "nearest" ]:
1606
1582
raise MergeError (f"direction invalid: { self .direction } " )
1607
1583
1608
- @property
1609
- def _asof_key (self ):
1610
- """ This is our asof key, the 'on' """
1611
- return self .left_on [- 1 ]
1612
-
1613
1584
def _get_merge_keys (self ):
1614
1585
1615
1586
# note this function has side effects
0 commit comments