Skip to content

Commit 0d95999

Browse files
committed
Merge pull request #10240 from sinhrks/series_ops_name
BUG: Series arithmetic methods incorrectly hold name
2 parents 4fde946 + a7a02f4 commit 0d95999

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

doc/source/whatsnew/v0.17.0.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Bug Fixes
7777
- Bug in getting timezone data with ``dateutil`` on various platforms ( :issue:`9059`, :issue:`8639`, :issue:`9663`, :issue:`10121`)
7878
- Bug in display datetimes with mixed frequencies uniformly; display 'ms' datetimes to the proper precision. (:issue:`10170`)
7979

80-
80+
- Bung in ``Series`` arithmetic methods may incorrectly hold names (:issue:`10068`)
8181

8282
- Bug in ``DatetimeIndex`` and ``TimedeltaIndex`` names are lost after timedelta arithmetics ( :issue:`9926`)
8383

pandas/core/series.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1508,7 +1508,12 @@ def _binop(self, other, func, level=None, fill_value=None):
15081508

15091509
result = func(this_vals, other_vals)
15101510
name = _maybe_match_name(self, other)
1511-
return self._constructor(result, index=new_index).__finalize__(self)
1511+
result = self._constructor(result, index=new_index, name=name)
1512+
result = result.__finalize__(self)
1513+
if name is None:
1514+
# When name is None, __finalize__ overwrites current name
1515+
result.name = None
1516+
return result
15121517

15131518
def combine(self, other, func, fill_value=nan):
15141519
"""

pandas/tests/test_series.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -264,10 +264,11 @@ def test_tab_completion(self):
264264
self.assertTrue('dt' not in dir(s))
265265

266266
def test_binop_maybe_preserve_name(self):
267-
268267
# names match, preserve
269268
result = self.ts * self.ts
270269
self.assertEqual(result.name, self.ts.name)
270+
result = self.ts.mul(self.ts)
271+
self.assertEqual(result.name, self.ts.name)
271272

272273
result = self.ts * self.ts[:-2]
273274
self.assertEqual(result.name, self.ts.name)
@@ -277,6 +278,22 @@ def test_binop_maybe_preserve_name(self):
277278
cp.name = 'something else'
278279
result = self.ts + cp
279280
self.assertIsNone(result.name)
281+
result = self.ts.add(cp)
282+
self.assertIsNone(result.name)
283+
284+
ops = ['add', 'sub', 'mul', 'div', 'truediv', 'floordiv', 'mod', 'pow']
285+
ops = ops + ['r' + op for op in ops]
286+
for op in ops:
287+
# names match, preserve
288+
s = self.ts.copy()
289+
result = getattr(s, op)(s)
290+
self.assertEqual(result.name, self.ts.name)
291+
292+
# names don't match, don't preserve
293+
cp = self.ts.copy()
294+
cp.name = 'changed'
295+
result = getattr(s, op)(cp)
296+
self.assertIsNone(result.name)
280297

281298
def test_combine_first_name(self):
282299
result = self.ts.combine_first(self.ts[:5])

0 commit comments

Comments
 (0)