【问题标题】:How to plot the grouped data?如何绘制分组数据?
【发布时间】:2020-11-15 12:24:31
【问题描述】:

我有以下数据框,它是包含 18 种汽车的 200 行的子集。

import pandas as pd

cars = {'Vnum': [1497, 1923, 1002, 1229, 1168, 1644, 2002, 1879, 1265, 1176, 1305, 1080],
       'name': ['Honda Civic','Toyota Corolla','Honda Civic', 'Toyota Corolla','Ford Focus','Audi A4','Honda Civic','Honda Civic','Toyota Corolla','Toyota Corolla','Toyota Corolla','Honda Civic'],
       'Enum': [23, 9, 2, 45, 13, 4, 25, 11, 6, 14, 27, 8],
       'Syear': [2019, 2000, 2003, 2000, 2000, 2019, 1977, 2000, 2003, 2003, 2000, 2000],
      
       }

df = pd.DataFrame(cars, columns = ['Vnum', 'name','Vnum','Syear'])

print (df)

我需要您的帮助来可视化数据。

我想要一个条形图,其中汽车名称出现在横轴上,还有一个条形图显示每年的数量。 (我添加图像) 任何其他情节都可以,我只需要查看汽车和年份的关系。

这段代码我无处可去。

df_gg=df.groupby(['name','Syear']); df_gg.groups

【问题讨论】:

    标签: python pandas group-by data-visualization


    【解决方案1】:

    使用(有效的替代方案)-

    df.groupby(['name', 'Syear'])['Vnum'].count().unstack(level=-1).plot(kind = 'bar', rot = 0)
    

    时间

    @Mlang's解决方案-

    300 ms ± 59.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    

    这个-

    53.1 ms ± 4.65 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    

    【讨论】:

    • 感谢@Vivek Kalyanarangan 提供更有效的解决方案!
    • 不修改df不是主要优点吗?
    【解决方案2】:

    您可以将分组的 DataFrame 转换为数据透视表并绘制它。

    df = df.groupby(['name', 'Syear']).count().reset_index()
    
    pd.pivot_table(df, index = 'name', columns = 'Syear', values = 'Vnum').plot(kind = 'bar', rot = 0)
    plt.show()
    

    【讨论】:

      【解决方案3】:

      尝试增加附加值。

          import plotly.graph_objects as go
          
          df['name_year'] = df.name + ' ' + df.Syear.apply(str)
          
          traces = []
          for name_year in list(set(df.name_year)):
              trace = go.Bar(name=name_year, 
                      x=df[df['name_year'] == name_year].name,
                      y=df[df['name_year'] == name_year].Vnum,
                      text=df[df['name_year'] == name_year].Syear,
                      textposition='auto')
              traces.append(trace)
          
          fig = go.Figure(data=traces)
          fig.update_layout(barmode='group')
          fig.show()
      

      更新: 固定代码

      【讨论】:

      • @Vivek Kalyanarangan,@mlang,@Savostyanov Konstantin 感谢大家提供有趣的代码。我可以用所有的方法来绘制我的数据,但是因为有三十年的数据,所以传说变得太长了,而且情节看起来不太好看。也许条形图根本不适合这个项目。
      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 2017-11-30
      • 2018-05-17
      • 2019-03-28
      • 2019-03-03
      • 2019-10-15
      • 1970-01-01
      • 2016-12-21
      相关资源
      最近更新 更多