【问题标题】:Pandas - Aggregating and Plotting ResultsPandas - 聚合和绘制结果
【发布时间】:2016-07-21 16:23:01
【问题描述】:

我有一个我认为应该是一个相当简单的问题,但我已经为此奋斗了好几个小时

我想对 pandas 数据框进行聚合,然后使用 matplotlib 进行绘制

我从一张包含年份和汽车型号的巨大表格开始。然后我想计算总销售价格和要价百分比。

我这样做如下

percent_asking_price =(df.groupby(['year','model'])['salesprice'].sum()/df.groupby(['year','model'])['askingprice'].sum())*100

这似乎做了我想做的事,但是我不知道如何处理输出 - 它返回的输出看起来像:

从那时起,我不知道如何处理它。我想使用 matplotlib 绘制年份和型号名称的组合,使其看起来像这样:

有点沮丧,因为这是我可以在 r 中使用 ddply 和 ggplot 非常快速地完成的事情,但在这里无法到达任何地方

我已尝试将输出转换为数据框,但这并没有让我到任何地方

非常感谢帮助

将显示结果的小集合如下:

year,model,salesprice,askingprice
2009,Taurus,25410,30000
2009,Taurus,8698,10000
2009,Maxima,11135,15000
2009,Maxima,8500,10000
2010,Corvette,25000,30000
2010,Corvette,18320,20000
2010,Trans Am,32000,35000
2010,Trans Am,23620,25000

最后 - 有没有办法将输出转换为如下所示的数据帧,所以我可以对输出做进一步的工作?我不想丢失第一列中的值..

谢谢!

【问题讨论】:

  • 请在分组前显示您的原始数据,以便我们重现您的整个问题。
  • 年份,型号,销售价格,要价 2009,Taurus,25410,30000 2009,Taurus,8698,10000 2009,Maxima,11135,15000 2009,Maxima,8500,10000 2010,Corvette,25000,30000 2010,克尔维特,18320,20000 2010,Trans Am,32000,35000 2010,Trans Am,23620,25000

标签: pandas matplotlib dataframe aggregation


【解决方案1】:

试试这个:

In [383]: df_plt = ((df.groupby(['year','model'])['salesprice'].sum() \
   .....:            / \
   .....:            df.groupby(['year','model'])['askingprice'].sum())*100).reset_index()

In [384]: df_plt
Out[384]:
   year     model      0
0  2009    Maxima  78.54
1  2009    Taurus  85.27
2  2010  Corvette  86.64
3  2010  Trans Am  92.70

In [385]: df_plt['Year_Model'] = df_plt.year.astype(str) + ' ' + df_plt.model

In [386]: df_plt
Out[386]:
   year     model      0     Year_Model
0  2009    Maxima  78.54    2009 Maxima
1  2009    Taurus  85.27    2009 Taurus
2  2010  Corvette  86.64  2010 Corvette
3  2010  Trans Am  92.70  2010 Trans Am


In [387]: df_plt = df_plt.set_index('Year_Model')[[0]].rename(columns={0:'Percent Asking Price'})

In [388]: df_plt
Out[388]:
               Percent Asking Price
Year_Model
2009 Maxima                   78.54
2009 Taurus                   85.27
2010 Corvette                 86.64
2010 Trans Am                 92.70

In [389]: matplotlib.style.use('ggplot')

In [390]: ax = df_plt.plot(kind='bar', rot=0)

In [391]: ax.yaxis.grid(True)

【讨论】:

  • 这行得通,但是您是如何让 Pct 出现在图例中的呢?此外,有没有办法将值显示为连接文本(即 2009 Taurus)而不是(2009,Taurus)?谢谢
  • 你太棒了.. 谢谢!如此失望的 R 变得容易多了.. 这太疯狂了
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多