Skip to content

Commit 422f7f8

Browse files
author
Alex Alekseyev
committed
ENH: Allow fill_value for frame arithmetic (pandas-dev#13488)
1 parent db419bf commit 422f7f8

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

pandas/core/frame.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -3653,21 +3653,14 @@ def _combine_series_infer(self, other, func, level=None, fill_value=None):
36533653

36543654
def _combine_match_index(self, other, func, level=None, fill_value=None):
36553655
left, right = self.align(other, join='outer', axis=0, level=level,
3656-
copy=False)
3657-
if fill_value is not None:
3658-
raise NotImplementedError("fill_value %r not supported." %
3659-
fill_value)
3656+
copy=False, fill_value=fill_value)
36603657
return self._constructor(func(left.values.T, right.values).T,
36613658
index=left.index, columns=self.columns,
36623659
copy=False)
36633660

36643661
def _combine_match_columns(self, other, func, level=None, fill_value=None):
36653662
left, right = self.align(other, join='outer', axis=1, level=level,
3666-
copy=False)
3667-
if fill_value is not None:
3668-
raise NotImplementedError("fill_value %r not supported" %
3669-
fill_value)
3670-
3663+
copy=False, fill_value=fill_value)
36713664
new_data = left._data.eval(func=func, other=right,
36723665
axes=[left.columns, self.index])
36733666
return self._constructor(new_data)

pandas/tests/frame/test_operators.py

+20-4
Original file line numberDiff line numberDiff line change
@@ -447,10 +447,26 @@ def test_arith_flex_frame(self):
447447

448448
result = self.frame[:0].add(self.frame)
449449
assert_frame_equal(result, self.frame * np.nan)
450-
with tm.assert_raises_regex(NotImplementedError, 'fill_value'):
451-
self.frame.add(self.frame.iloc[0], fill_value=3)
452-
with tm.assert_raises_regex(NotImplementedError, 'fill_value'):
453-
self.frame.add(self.frame.iloc[0], axis='index', fill_value=3)
450+
451+
def test_arith_fill(self):
452+
# GH 13488
453+
df = DataFrame([[10.0, 11.0, 12.0, 13.0],
454+
[20.0, 21.0, 22.0, np.nan],
455+
[30.0, np.nan, np.nan, np.nan]])
456+
s = Series([0.0, 1.0, 2.0, np.nan])
457+
458+
by_columns = DataFrame([[10.0, 12.0, 14.0, 13.0],
459+
[20.0, 22.0, 24.0, 0.0],
460+
[30.0, 1.0, 2.0, 0.0]])
461+
assert_frame_equal(by_columns,
462+
df.add(s, fill_value=0.0))
463+
464+
by_index = DataFrame([[10.0, 11.0, 12.0, 13.0],
465+
[21.0, 22.0, 23.0, 1.0],
466+
[32.0, 2.0, 2.0, 2.0],
467+
[0.0, 0.0, 0.0, 0.0]])
468+
assert_frame_equal(by_index,
469+
df.add(s, fill_value=0.0, axis='index'))
454470

455471
def test_binary_ops_align(self):
456472

0 commit comments

Comments
 (0)