У меня есть пустышка 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'])

Что выглядит так: введите описание изображения здесь

Цель - создать такой сюжет: введите описание изображения здесь

Обратите внимание, что английский, французский и тайский языки должны иметь разные цвета - ничего необычного, как на картинке.

Таким образом, ось Y равна numerator_xx / denominator_xx для всех языков, разделенных на числовые, текстовые и оба.
Например, числовой будет числовой ряд: numerator_en / denominator_en и numerator_fr / denominator_fr и так далее ...

Английский = _en Французский = _fr Тайский = _th

2
Exa 8 Июн 2021 в 23:46

1 ответ

Лучший ответ

Попробуйте создать MultiIndex с помощью str.split, затем разделите numerator на 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

Затем plot как обычно:

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

plot


Полный рабочий пример:

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 Июн 2021 в 21:06