Skip to main content
 首页 » 编程设计

python之Pandas 中 Dataframe 的堆积条形图

2025年05月04日9insus

我正在尝试制作一个堆叠条形图,其中 x 轴是客户名称,y 轴是调用次数,堆叠是月份。

我制作了一个如下所示的数据透视表:

数据透视表.head(3)

Out[23]:  
Month                      1   2   3   4   5   6   7   8   9   10  11  12 
CompanyName                                                               
Company1   11   3   2   3   5   7   3   6   8   3   5   8 
Company2   3   1   2  18   3   4   5   4   5   5   3   2 
Company3   2   6   1   3   2   0   5   6   4   8   4   7 

这是代码

df = pd.read_csv('MYDATA.csv') 
df = df.set_index('recvd_dttm') 
df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M') 
 
result = df.groupby([lambda idx: idx.month, 'CompanyName']).agg(len).reset_index() 
result.columns = ['Month', 'CompanyName', 'NumberCalls'] 
pivot_table = result.pivot(index='Month', columns='CompanyName', values='NumberCalls').fillna(0) 
s = pivot_table.sum().sort(ascending=False,inplace=False) 
pivot_table = pivot_table.ix[:,s.index[:40]] 
pivot_table = pivot_table.transpose() 
 
 
 
pivot_table = pivot_table.reset_index() 
pivot_table['CompanyName'] = [str(x) for x in pivot_table['CompanyName']] 
Companies = list(pivot_table['CompanyName']) 
months = ["1","2","3","4","5","6","7","8","9","10","11","12"] 
pivot_table = pivot_table.set_index('CompanyName') 

对于绘图我已经尝试过

ax = pivot_table.plot(kind='bar', title ="Bar chart",figsize=(15,10),legend=True, fontsize=12) 
ax.set_xlabel("Company",fontsize=12) 
ax.set_ylabel("Number of Calls",fontsize=12) 

和

pivot_table.plot(kind='bar',stacked=True) 

并尝试在 Bokeh 中做到这一点(对于这个情节来说漂亮很重要):

months = OrderedDict(Jan=Jan, Feb=Feb, Mar=Mar, Apr=Apr,  
 
May=May,Jun=Jun,Jul=Jul,Aug=Aug,Sep=Sep,Oct=Oct,Nov=Nov,Dec=Dec) 
 
 
# any of the following commented are also alid Bar inputs 
#medals = pd.DataFrame(medals) 
#medals = list(medals.values()) 
 
output_file("stacked_bar.html") 
 
bar = Bar(months, Companies, title="Stacked bars", stacked=True) 
 
show(bar) 

对于所有三种绘图方法,不断出现此错误:ValueError: Length mismatch: Expected axis has 27 elements, new values have 3 elements 我查过这个 ValueError 但我还是没有不明白这里发生了什么。

请您参考如下方法:

在我的例子中,我读入了错误的数据文件。