Использование Pandas для составления столбчатой ​​диаграммы на основе суммы значений - PullRequest
0 голосов
/ 30 мая 2018

У меня есть фрейм данных, который выглядит следующим образом:

 Company      Product     Sale Amount   Transaction
1 Com1        Prod1       $100            T1
2 Com2        Prod1       $30             T2
3 Com1        Prod2       $120            T3
4 Com3        Prod1       $90             T4

Я хочу суммировать суммы продаж для каждой компании и поместить их в гистограмму с компаниями по оси x и ПродажиСумма по оси Y.Но я хочу, чтобы этот бар был с накоплением, где каждый отдельный стек - это продукт, который был продан.Я бы хотел, чтобы это было отсортировано, чтобы сначала показалась самая высокая сумма продаж, а затем снизилась.

Таким образом, в принципе, я смогу увидеть стопку продуктов, проданных компании в форме бара.

В настоящее время я могу распечатать итоги продаж каждой компании следующим образом:

salesTotal=pandaFrame.groupby(['Company Name'])['Sales Amount'].sum().reset_index()
salesTotal.sort_index(inplace=True)
salesTotal = salesTotal.sort_values(by=['Sales Amount'], ascending=False)

Но это дает мне отдельный фрейм данных и теряет информацию о продукте.

1 Ответ

0 голосов
/ 30 мая 2018

При условии, что есть только два продукта:

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

# Setting up
Company = ['Com' + str(i) for i in list(np.random.randint(1, 15, 30))]
Product = ['Prod' + str(i) for i in list(np.random.randint(1, 3, 30))]
Sales = np.random.randint(30, 200, 30)
df = pd.DataFrame({'Company': Company, 'Product': Product, 'Sales': Sales})

# Solution
df_1 = df.groupby(['Company', 'Product'])['Sales'].sum()
df_1 = df_1.unstack().fillna(0)
df_1['Total_Sales'] = df_1['Prod1'].add(df_1['Prod2'])
df_1 = df_1.sort_values('Total_Sales', ascending=False)[:10]

df_1.iloc[:, :2].plot(kind='bar', stacked=True)
plt.ylabel('Sales Amount, $')
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...