Столбчатая диаграмма с процентным накоплением с определенной структурой данных

#python #matplotlib #seaborn

#python #matplotlib #сиборн

Вопрос:

У меня есть следующая конкретная структура данных:

 df = pd.DataFrame(columns=["Feature1", "Target"], 
                  data=[["A", 0],
                        ["A", 0],
                        ["A", 0],
                        ["A", 1],
                        ["A", 1],
                        ["A", 1], 
                        
                        ["B", 1],
                        ["B", 1],
                        ["B", 0],
                        ["B", 0],
                        ["B", 0]])
  

Как мне построить столбчатую диаграмму с процентным накоплением, которая выглядит примерно так, как показано ниже, чтобы я мог показать пропорции 0 и 1 в двух группах A и B?

perc_bar

Примечание: пропорции в dataframe df отличаются от пропорций, показанных на рисунке.

Ответ №1:

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

Результирующий фрейм данных может быть построен следующим образом:

 import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

sns.set()
df = pd.DataFrame(columns=["Feature1", "Target"],
                  data=[["A", 0], ["A", 0], ["A", 0], ["A", 1], ["A", 1], ["A", 1],
                        ["B", 1], ["B", 1], ["B", 0], ["B", 0], ["B", 0]])
df1 = (df.groupby(["Feature1", "Target"]).size() / df.groupby(["Feature1"]).size() * 100)
df1 = df1.reset_index(name='Percentage')
features = np.unique(df1['Feature1'])
plt.bar(x=features, height=100, color='dodgerblue', label='Target = 1')
plt.bar(x=features,
        height=[df1[(df1['Feature1'] == x) amp; (df1['Target'] == 0)]['Percentage'].values[0] for x in features],
        color='crimson', label='Target = 0')
plt.legend()
plt.xlabel('Feature1')
plt.ylabel('Percentage')
plt.show()
  

пример графика