如何绘制分组数据?

3

我有以下数据框,它是一个由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

enter image description here

3个回答

2
尝试增加附加值。
    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 感谢你们提供的有趣代码。我已经使用所有方法绘制了我的数据,但是由于数据跨度为三十年,图例变得太长,而且图表看起来不太美观。也许条形图根本不适合这个项目。 - sam_sam

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()

enter image description here


2

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

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

这里输入图片描述

时间

@Mlang的解决方案 -

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)

1
感谢@Vivek Kalyanarangan提供更高效的解决方案! - mlang
它的主要优点不就是不修改数据框吗? - Mr. T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接