def reparto_coste(self, detallado=False):
<EOL>cod_tarifa = DATOS_TIPO_PEAJE[self._tipo_peaje][<NUM_LIT:1>]<EOL>_, impuesto_gen, impuesto_medida = DATOS_ZONAS_IMPUESTOS[self._zona_impuestos]<EOL>coste_horario = pd.DataFrame(self._consumo_horario)<EOL>for (ndias, ndias_año, año), (coste, coef_p) in zip(self._periodos_fact, self._termino_fijo):<EOL><INDENT>b_period_f = coste_horario.index.year == año<EOL>coste_horario.loc[b_period_f, '<STR_LIT>'] = coef_p * self._potencia_contratada / (<NUM_LIT> * ndias_año)<EOL>coefs_ener = TERM_ENER_PEAJE_ACCESO_EUR_KWH_TEA[año][self._tipo_peaje]<EOL>tcu = self._pvpc_horario['<STR_LIT>'.format(cod_tarifa)].loc[b_period_f]<EOL>hay_discr, cons_discr = self._asigna_periodos_discr_horaria(coste_horario.loc[b_period_f, COL_CONSUMO])<EOL>if hay_discr:<EOL><INDENT>for c, coef in zip(cons_discr.columns[<NUM_LIT:1>:], coefs_ener):<EOL><INDENT>sub_pd = cons_discr[cons_discr[c]]<EOL>coste_horario.loc[sub_pd.index, '<STR_LIT>'] = coste_horario.loc[sub_pd.index, COL_CONSUMO] * coef<EOL><DEDENT><DEDENT>else:<EOL><INDENT>coste_horario.loc[b_period_f, '<STR_LIT>'] = coste_horario.loc[b_period_f, COL_CONSUMO] * coefs_ener[<NUM_LIT:0>]<EOL><DEDENT>coste_horario.loc[b_period_f, '<STR_LIT>'] += tcu * coste_horario.loc[b_period_f, COL_CONSUMO]<EOL><DEDENT>cols_suma = ['<STR_LIT>', '<STR_LIT>']<EOL>if self._con_bono_social:<EOL><INDENT>coste_horario['<STR_LIT>'] = coste_horario[cols_suma].sum(axis=<NUM_LIT:1>) * -<NUM_LIT><EOL><DEDENT>else:<EOL><INDENT>coste_horario['<STR_LIT>'] = <NUM_LIT:0.><EOL><DEDENT>cols_suma += ['<STR_LIT>']<EOL>coste_horario['<STR_LIT>'] = coste_horario[cols_suma].sum(axis=<NUM_LIT:1>) * self._impuesto_electrico_general<EOL>coste_horario['<STR_LIT>'] = self.gasto_equipo_medida / len(self._consumo_horario)<EOL>cols_suma += ['<STR_LIT>']<EOL>coste_horario['<STR_LIT>'] = coste_horario[cols_suma].sum(axis=<NUM_LIT:1>) * impuesto_gen<EOL>coste_horario['<STR_LIT>'] += coste_horario['<STR_LIT>'] * impuesto_medida<EOL>cols_suma += ['<STR_LIT>', '<STR_LIT>']<EOL>if detallado:<EOL><INDENT>return coste_horario<EOL><DEDENT>else:<EOL><INDENT>return coste_horario[cols_suma].sum(axis=<NUM_LIT:1>).rename('<STR_LIT>')<EOL><DEDENT>
Devuelve un pd.DataFrame o pd.Series con el coste facturado repartido por horas, conforme al consumo y precio
        de cada hora.
        Dado que el suministrador aplica convenientes redondeos por cada término facturado, se observará que la suma de
        la serie de coste no coincide necesariamente con el importe total de la factura, admitiendo cierto error mínimo.
        La mejor aproximación se consigue rápidamente obteniendo el df de costes y haciendo la suma:
          `df_coste.drop(COL_CONSUMO, axis=1).sum(axis=0).round(2).sum()`
        Aunque ésta tampoco es exactamente igual al proceso seguido por el cálculo de la factura.

        :param detallado: Si `True`, devuelve el pd.Dataframe con coste repartido en por columnas,
        coste total como pd.Series por defecto.
        :return: coste_horario