def aggregate_loss(self, groupby=None, kwargs=None): """ Aggregate data by the `groupby` attribute, using the `kwargs` to perform any arithmetic aggregation on fields (e.g. summation, mean, etc.) :param str groupby: A column in the `DataFrame` that corresponds to regions by which to aggregate data :param dict kwargs: A `dict` with keys of valid column names (from the `DataFrame`) and values being lists of aggregation functions to apply to the columns. For example:: kwargs = {'REPLACEMENT_VALUE': ['mean', 'sum'], 'structural_loss_ratio': ['mean', 'std']} See https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#aggregation for more guidance on using aggregation with `DataFrames` """ LOGGER.info(f"Aggregating loss using {groupby} attribute") a1 = self.prov.activity(":AggregateLoss", datetime.now().strftime(DATEFMT), None, { "prov:type": "Aggregation", "void:aggregator": repr(groupby) }) self.prov.wasInformedBy(a1, self.provlabel) self.exposure_agg = aggregate.aggregate_loss_atts( self.exposure_att, groupby, kwargs)
def test_aggregate_loss_atts(self): data_frame = pd.DataFrame({'A': ['X', 'Y', 'Y'], 'B': [1, 2, 3]}) aggregated = aggregate_loss_atts(data_frame, 'A', {'B': 'sum'}) assert_frame_equal(pd.DataFrame({ 'A': ['X', 'Y'], 'B': [1, 5] }), aggregated)
def test_aggregate_loss_atts_invalid_field(self): with self.assertRaises(SystemExit) as context: data_frame = pd.DataFrame({'A': ['X', 'Y', 'Y'], 'B': [1, 2, 3]}) aggregate_loss_atts(data_frame, 'Z') self.assertEqual(context.exception.code, 1)