def __merge_datasets(datasets, mapping): """Merge two or more datasets.""" dframes = [] if not mapping: mapping = {} for dataset in datasets: dframe = dataset.dframe() column_map = mapping.get(dataset.dataset_id) if column_map: dframe = BambooFrame(dframe.rename(columns=column_map)) dframe = dframe.add_parent_column(dataset.dataset_id) dframes.append(dframe) return concat(dframes, ignore_index=True)
def save(self): """Save this aggregation. If an aggregated dataset for this aggregations group already exists store in this dataset, if not create a new aggregated dataset and store the aggregation in this new aggregated dataset. """ new_dframe = BambooFrame(self.aggregation.eval(self.columns)) new_dframe = new_dframe.add_parent_column(self.dataset.dataset_id) agg_dataset = self.dataset.aggregated_dataset(self.groups) if agg_dataset is None: agg_dataset = self.dataset.new_agg_dataset( new_dframe, self.groups) else: agg_dframe = agg_dataset.dframe() new_dframe = self.__merge_dframes([agg_dframe, new_dframe]) agg_dataset.replace_observations(new_dframe) self.new_dframe = new_dframe