diff --git a/chainladder/core/pandas.py b/chainladder/core/pandas.py index 50179246..9d51741c 100644 --- a/chainladder/core/pandas.py +++ b/chainladder/core/pandas.py @@ -269,6 +269,26 @@ def fillna(self, value=None, inplace=False): new_obj = self.copy() return new_obj.fillna(value=value, inplace=True) + def fillzero(self, inplace=False): + """Fill nan with 0 by axis. separate function from fillna() because fillna(0) isn't working + Parameters + ---------- + inplace: boolean, default = False + Whether to modify the triangle object directly (True), or + return a new modified triangle (False). + + Returns + ------- + Triangle + """ + if inplace: + xp = self.get_array_module() + self.values = np.where((xp.nan_to_num(self.values) == 0) * (self.nan_triangle == 1), self.nan_triangle * 0, self.values) + return self + else: + new_obj = self.copy() + return new_obj.fillzero(inplace=True) + def drop(self, labels=None, axis=1): """Drop specified labels from rows or columns. diff --git a/chainladder/core/tests/test_triangle.py b/chainladder/core/tests/test_triangle.py index 8ff5d638..8070ee6e 100644 --- a/chainladder/core/tests/test_triangle.py +++ b/chainladder/core/tests/test_triangle.py @@ -923,3 +923,9 @@ def test_OXDX_triangle(): #elif x in [6,3]: #assert np.all(tri.origin.strftime('%Y') == pd.to_datetime(tri.odims).strftime('%Y')) #assert np.all(tri.origin.strftime('%q').values.astype(float) == np.ceil((pd.to_datetime(tri.odims).strftime('%m').values.astype(int) - 0.5) / 3)) + +def test_fillzero(): + raa = cl.load_sample('raa') + zero = raa - raa[raa.origin=='1982'] + filled = zero.fillzero() + assert (filled[filled.origin == '1982'][filled.development == 24].values.flatten()[0]) == 0 \ No newline at end of file