У меня есть df, который выглядит так:
+---------+---------------------------------------------------------+-------------+
| Product | Features | Profits USD |
+---------+---------------------------------------------------------+-------------+
| ABC | Feature A1|Feature B5|Feature D4 | 123,000 |
| DEF | Feature B8|Feature C3 | (23,000) |
| GHI | Feature B5|Feature B8|Feature D7|Feature F5|Feature T6 | 1,435,000 |
+---------+---------------------------------------------------------+-------------+
Я пытаюсь сделать следующее:
- Создать отдельные столбцы для каждой функции;
- Рассчитать общую прибыль для каждого объекта;
- Построить круговую диаграмму, используя Python> Pandas, показывающий нисходящий список объектов на прибыль +%.
Мой метод, хотя и не логичный,это добавить прибыль вместе для каждой функции для каждой линии.Таким образом, для продукта ABC: функция прибылей A1 = 123 000, функция прибылей B5 = 123 000 и т. Д.
На данный момент у меня есть следующий код для вычисления разбиения объектов на несколько столбцов с последующим группированием по прибыли:
Features = (df.Features.str.split('|', expand=True)
.stack()
.to_frame(name='Feature')
)
Features.index = Features.index.droplevel(1)
Features_profits = (Features.join(df['Profits USD'])
.groupby('Feature')
.sum()
.sort_values('Profits USD', ascending = False))
Но тогда у меня возникла проблема с построением круговой диаграммы:
Features_profits.plot(kind='pie', autopct='%1.1f%%', label='Feature', figsize =(10,10))
Output > ValueError: pie requires either y column or 'subplots=True'
Я также попытался:
Features_profits
.stack().value_counts()
.plot(kind='pie', autopct='%1.1f%%', label='Feature', figsize =(10,10))
Однако круговая диаграмма результата для приведенного выше кода занимаетСтолбец Прибыль в долларах США в виде меток / круговых ломтиков.
Полагаю, одним из способов было бы заменить значение в Прибыль в долларах внутри каждого столбца объектов, однако я предполагаю, что для этого должен быть более элегантный способ.
Я застрял, и любая помощь будет признательна.