我有一个如下所示的数据框:
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)
但这给了我一个单独的数据框并丢失了产品信息。
答案 0 :(得分:0)
假设只有两种产品:
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()