【问题标题】:Plot Bar Graph with pandas data frame which has aggregated columns使用具有聚合列的 pandas 数据框绘制条形图
【发布时间】:2021-01-26 14:02:40
【问题描述】:

我已经使用以下代码生成了一个数据框。它提供了多组数据框

dfwc = dffin.groupby('Borker')[['Netweight','TotPrice']].agg(['sum' ,'count'])

Borker,Sale_year,Saleno,Sale_dte,Fact_no,Cat_code,Grade,Gross_weight,Net_Weight,Lot_No,inv_year,Inv_no,Price,Netweight,BuyerRef,Buyer_code,SLReg,Btype
AS,2020,34,2/9/2020,MF1003 ,EXEST,BOPF      ,1163.5,1160,1,2020,0381R,540,1160,WC05 ,Watawala Tea Ceylon Ltd.                          ,1,M
AS,2020,34,2/9/2020,MF0663 ,EXEST,BOPF      ,1123.5,1120,4,2020,0165R,550,1120,WC05 ,Watawala Tea Ceylon Ltd.                          ,1,M
FW,2020,34,2/9/2020,MF0069 ,EXEST,BOP       ,963.5,960,5,2020,0278R,570,960,CM01 ,Ceylon Tea Marketing Ltd.                         ,1,M
CT,2020,34,2/9/2020,MF0069 ,EXEST,BOPF      ,1103.5,1100,6,2020,0282R,580,1100,CM01 ,Ceylon Tea Marketing Ltd.                         ,1,M
FW,2020,34,2/9/2020,MF0348 ,EXEST,BOPF      ,1163.5,1160,7,2020,0259R,570,1160,CM01 ,Ceylon Tea Marketing Ltd.                         ,1,M
CT,2020,34,2/9/2020,MF0348 ,EXEST,BOPF      ,1163.5,1160,8,2020,0264R,560,1160,TT01 ,Tea Tang (Pvt) Ltd                                ,0,M
MC,2020,34,2/9/2020,MF0703 ,EXEST,BOPF      ,1123.5,1120,9,2020,0193R,540,1120,AB01 ,Akbar Brothers (Pvt) Ltd                          ,1,M
MC,2020,34,2/9/2020,MF0552 ,EXEST,BOPF      ,1123.5,1120,11,2020,266,520,1120,AB01 ,Akbar Brothers (Pvt) Ltd                          ,1,M
JK,2020,34,2/9/2020,MF0294 ,EXEST,BOP       ,1003.5,1000,12,2020,0097R,560,1000,UL01 ,"Unilever Lipton Ceylon Ltd, Tea Division          ",1,M
JK,2020,34,2/9/2020,MF0981 ,EXEST,BOP       ,1003.5,1000,14,2020,0189R,580,1000,HC03 ,Harrisons (Colombo) Ltd.                          ,1,M
LC,2020,34,2/9/2020,MF0981 ,EXEST,BOPF      ,1123.5,1120,15,2020,0183R,590,1120,TL01 ,TDK Trade links (Pvt) Ltd.                        ,1,M
LC,2020,34,2/9/2020,MF0981 ,EXEST,BOPF      ,1123.5,1120,16,2020,0186R,590,1120,TL01 ,TDK Trade links (Pvt) Ltd.                        ,1,M
MB,2020,34,2/9/2020,MF0396 ,EXEST,BOPSp     ,1003.5,1000,17,2020,0223R,570,1000,MR01 ,Mabroc Teas (Pvt) Ltd.                            ,1,M
MB,2020,34,2/9/2020,MF0396 ,EXEST,BOPF      ,1163.5,1160,18,2020,0230R,590,1160,TL01 ,TDK Trade links (Pvt) Ltd.                        ,1,M
BC,2020,34,2/9/2020,MF0396 ,EXEST,BOPF      ,1163.5,1160,19,2020,0232R,570,1160,AB01 ,Akbar Brothers (Pvt) Ltd                          ,1,M
FW,2020,34,2/9/2020,MF0772 ,EXEST,BOP       ,1003.5,1000,20,2020,0213R,600,1000,VL01 ,Venture Tea Pvt. Ltd.                             ,1,M
EB,2020,34,2/9/2020,MF0772 ,EXEST,BOPF      ,1103.5,1100,21,2020,0214R,610,1100,CM01 ,Ceylon Tea Marketing Ltd.                         ,1,M
AS,2020,34,2/9/2020,MF0489 ,EXEST,BOP       ,1003.5,1000,22,2020,0194R,590,1000,UL01 ,"Unilever Lipton Ceylon Ltd, Tea Division          ",1,M
MB,2020,34,2/9/2020,MF0489 ,EXEST,BOPF      ,1123.5,1120,23,2020,0197R,560,1120,WL02 ,Walters Bay Bogawantalawa Estate (Pvt) Ltd.       ,1,M
CT,2020,34,2/9/2020,MF0711 ,EXEST,BOPSp     ,963.5,960,24,2020,0230R,600,960,DC02 ,Dilmah Ceylon Tea Company PLC                     ,1,M
CT,2020,34,2/9/2020,MF0711 ,EXEST,BOPF      ,1163.5,1160,25,2020,0233R,590,1160,WC05 ,Watawala Tea Ceylon Ltd.                          ,1,M

我尝试使用以下代码片段进行绘图以生成条形图。

dfwc.reset_index().plot(x='Borker', y = 'Netweight' , kind="bar")

我想生成总重量和总价格的子图 (Total_Price = ['Price'] * ['Netweight'])。

希望专家能在这方面帮助我。

【问题讨论】:

  • don't paste data as images。请提供错误信息。
  • 我已设法纠正错误。但是,仍然难以使用 Total_Price 和 Total Weight 生成子图。
  • 我无法理解您所说的“总重量和总价格的子图”是什么意思。它是总重量与总价格的对比,还是反之亦然?对我来说,两者听起来都有点奇怪。请明确定义什么是x轴什么是y轴图上的数据是什么
  • 什么是“总重量”?而且总价的名称还是不一致。
  • 这会是数据的最终形式吗? dfwc = dffin.groupby('Borker')[['Netweight','Price']].agg(['sum'])

标签: python pandas dataframe matplotlib bar-chart


【解决方案1】:

只需使用df.plot(kind="barh") 而不是kind=bar

dfwc.reset_index().plot(x='Borker', y='Total_Price', kind="barh", title="Price vs. Broker")

BorkerTotal_Weight 的工作方式相同。另请参阅official example

注意:

必须重命名列才能删除分层名称。例如

dfwc.columns = ["Total_Weight", "count", "Total_Price", "count2"]

所需的Total_Price 就是这样生成的。 (我无法确定,因为 OP 在命名上不一致。)。

# this    
dffin["Total_Price"] = dffin["Price"] * dffin['Netweight']
dfwc = dffin.groupby('Borker')[['Netweight','Total_Price']].agg(['sum' ,'count'])

# could also be this but not sure
dfwc = dffin.groupby('Borker')[['Netweight','Price']].agg(['sum' ,'count'])

【讨论】:

  • 我只是问,当我在数据集上运行此代码时 (dfwc = dffin.groupby('Borker')[['Netweight','TotPrice']].agg(['sum ' ,'count'])),我可以得到数据框,包括计数、重量总和和总价。使用生成的数据框,我如何绘制“经纪人”与“Total_Weight”以及“经纪人”与“Total_Price”。
  • 'TotPrice' 列不存在,因此我无法重用您的代码来重现 dfwc
  • 反正我有时间再做一次修改。请看一下,看看我是否明白你的主要问题。
猜你喜欢
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2022-07-07
相关资源
最近更新 更多