Tengo este dummy df:

data = {'numerator_en':[11, 113, 53],
             'denominator_en':[91, 982, 298],
             'numerator_fr':[6, 232, 58],
             'denominator_fr':[63, 1278, 389],
             'numerator_th':[14, 652, 231],
             'denominator_th':[416, 3835, 1437],
             }

dummy_df = pd.DataFrame(data, index = ['numeric', 'text', 'both'])

Que se parece a eso: ingrese la descripción de la imagen aquí

El objetivo es crear tal parcela: ingrese la descripción de la imagen aquí

Tenga en cuenta que el inglés, el francés y el tailandés deben tener diferentes colores, nada lujoso como en la imagen.

Por la presente, el eje Y es igual a numerator_xx / denominator_xx para todos los idiomas divididos en numérico, texto y ambos.
Por ejemplo, numérico sería numérico de fila: numerator_en / denominator_en y numerator_fr / denominator_fr y así sucesivamente.

Ingles = _en Francés = _fr Thai = _th

2
Exa 8 jun. 2021 a las 23:46

1 respuesta

La mejor respuesta

Intente crear un Multiindex con str.split luego divida numerator por denominator:

dummy_df.columns = dummy_df.columns.str.split('_', expand=True)
dummy_df = dummy_df['numerator'] / dummy_df['denominator']

dummy_df:

               en        fr        th
both     0.177852  0.149100  0.160752
numeric  0.120879  0.095238  0.033654
text     0.115071  0.181534  0.170013

Luego plot como normal:

dummy_df.plot(kind='bar', rot=0)
plt.show()

plot


Ejemplo completo de trabajo:

import pandas as pd
from matplotlib import pyplot as plt

data = {'numerator_en': [11, 113, 53],
        'denominator_en': [91, 982, 298],
        'numerator_fr': [6, 232, 58],
        'denominator_fr': [63, 1278, 389],
        'numerator_th': [14, 652, 231],
        'denominator_th': [416, 3835, 1437]}

dummy_df = pd.DataFrame(data, index=['numeric', 'text', 'both'])

dummy_df.columns = dummy_df.columns.str.split('_', expand=True)
dummy_df = dummy_df['numerator'] / dummy_df['denominator']

dummy_df.plot(kind='bar', rot=0)
plt.show()
2
Henry Ecker 8 jun. 2021 a las 21:06