def _function_by_group2(function, table=None, model=None, columns=None, group_by=None, **params): if isinstance(model, dict) and '_grouped_data' not in model: raise Exception('Unsupported model. model requires _grouped_data.') if isinstance(model, dict): groups = model['_grouped_data']['groups'] group_by = model['_grouped_data']['group_by'] if isinstance(table, pd.DataFrame): table, groups = _group( table, params, group_by) # use group keys from table even there is a model. sample_result = _sample_result(function, table, model, params, groups) res_keys, df_keys, model_keys_containing_repr = _info_from_sample_result( sample_result, group_by, groups) res_dict, success_keys = _function_by_group_key(function, table, model, params, groups, res_keys, group_by) for repr_key in model_keys_containing_repr: rb = BrtcReprBuilder() for group in success_keys: rb.addMD( '--- \n\n ### Group by {group_by} : {tmp_group}\n\n---'.format( group_by=group_by, tmp_group=group)) rb.merge(res_dict[repr_key]['_grouped_data']['data'][tuple(group)] ['_repr_brtc_']) res_dict[repr_key]['_repr_brtc_'] = rb.get() for df_key in df_keys: res_dict[df_key] = _flatten(res_dict[df_key], groups, group_by, columns) return res_dict
def _function_by_group(function, table=None, model=None, group_by=None, **params): if table is None and model is None: raise Exception( 'This function requires at least one of a table or a model') if isinstance(table, pd.DataFrame) and model is None and group_by is None: raise Exception('This function requires group_by.') if isinstance(model, dict) and '_grouped_data' not in model: raise Exception('Unsupported model. model requires _grouped_data.') if isinstance(model, dict): group_key_dict = model['_grouped_data']['group_key_dict'] group_by = model['_grouped_data']['group_by'] if isinstance(table, pd.DataFrame): table, group_key_dict = _group( table, group_by) # use group keys from table even there is a model. print('Number of groups: {}'.format(len(group_key_dict))) print('group_by: {}'.format(group_by)) print('group_key_dict: {}'.format(group_key_dict)) sample_result = _sample_result(function, table, model, params, group_key_dict) res_keys, df_keys, model_keys_containing_repr = _info_from_sample_result( sample_result, group_by, group_key_dict) res_dict, success_keys = _function_by_group_key(function, table, model, params, group_key_dict, res_keys, group_by) print(res_dict) print(success_keys) for repr_key in model_keys_containing_repr: rb = BrtcReprBuilder() for group in success_keys: rb.addMD( '--- \n\n ### Group by {group_by} : {tmp_group}\n\n---'.format( group_by=group_by, tmp_group=group_key_dict[group])) rb.merge(res_dict[repr_key]['_grouped_data']['data'][group] ['_repr_brtc_']) res_dict[repr_key]['_repr_brtc_'] = rb.get() for df_key in df_keys: res_dict[df_key] = _flatten(res_dict[df_key]) return res_dict
def _function_by_group(function, table, model=None, group_by=None, **params): if isinstance(table, pd.DataFrame) and group_by is not None: table, group_keys = _group(table, group_by) else: group_keys = table['_grouped_data'].keys() sample_group = group_keys[0] if model is None: sample_result = function(table=table['_grouped_data'][sample_group], **params) else: sample_result = function(table=table['_grouped_data'][sample_group], model=model['_grouped_data'][sample_group], **params) res_keys = sample_result.keys() df_keys = [ k for k, v in sample_result.items() if isinstance(v, pd.DataFrame) ] model_keys_containing_repr = [ k for k, v in sample_result.items() if isinstance(v, dict) and '_repr_brtc_' in v ] res_dict = dict() for res_key in res_keys: res_dict[res_key] = {'_grouped_data': dict()} for group in group_keys: if model is None: res_group = function(table=table['_grouped_data'][group], **params) else: res_group = function(table=table['_grouped_data'][group], model=model['_grouped_data'][group], **params) for res_key in res_keys: res_dict[res_key]['_grouped_data'][group] = res_group[res_key] for repr_key in model_keys_containing_repr: rb = BrtcReprBuilder() for group in group_keys: rb.addMD('{group}'.format(group=group)) rb.merge(res_dict[repr_key]['_grouped_data'][group]['_repr_brtc_']) res_dict[repr_key]['_repr_brtc_'] = rb.get() for df_key in df_keys: res_dict[df_key] = _flatten(res_dict[df_key]) return res_dict