Пример #1
0
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
Пример #2
0
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
Пример #3
0
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