<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def grouped_parallel_split_combine(args, split_fn, group_fn, parallel_fn, parallel_name, combine_name, file_key, combine_arg_keys, split_outfile_i=-1):
 """Parallel split runner that allows grouping of samples during processing. This builds on parallel_split_combine to provide the additional ability to group samples and subsequently split them back apart. This allows analysis of related samples together. In addition to the arguments documented in parallel_split_combine, this needs: group_fn: A function that groups samples together given their configuration details. """

    grouped_args = group_fn(args)
    split_args, combine_map, finished_out, extras = _get_split_tasks(grouped_args, split_fn, file_key,
                                                                     split_outfile_i)
    final_output = parallel_fn(parallel_name, split_args)
    combine_args, final_args = _organize_output(final_output, combine_map,
                                                file_key, combine_arg_keys)
    parallel_fn(combine_name, combine_args)
    return finished_out + final_args + extras