您如何绘制按另一列分组的数据?

时间:2019-04-29 18:49:00

标签: python plotly

我一直遇到一个问题,即我按某些列对数据进行分组,但是我无法弄清楚如何按已分组的数据进行绘图。

Here is my Data

例如

import plotly.plotly as py
import plotly.graph_objs as go

xs = df['region'].values
ys = df['AveragePrice'].values
data = [go.Bar(
    x=xs,
    y=ys,
    marker={
        'color': ys,
        'colorscale': 'Viridis'
    }
)]

layout = {
    'xaxis': {
        'categoryorder': 'array',
        'categoryarray': [x for _, x in sorted(zip(ys, xs))]
    }
}

fig = go.FigureWidget(data=data, layout=layout)
fig

这有效,但是没有显示我真正想要的。 ^

import plotly.plotly as py
import plotly.graph_objs as go
df1 = df.groupby(['region'])['AveragePrice'].mean()
xs = df1['region'].values
ys = df1['AveragePrice'].values
data = [go.Bar(
    x=xs,
    y=ys,
    marker={
        'color': ys,
        'colorscale': 'Viridis'
    }
)]

layout = {
    'xaxis': {
        'categoryorder': 'array',
        'categoryarray': [x for _, x in sorted(zip(ys, xs))]
    }
}

fig = go.FigureWidget(data=data, layout=layout)
fig

这给了我一个关键错误。 ^

1 个答案:

答案 0 :(得分:0)

您需要将.reset_index()添加到您的groupby通话中。没有熊猫,就不可能只有pd.Series,而不能有一个表格可以调用诸如region这样的列:

region
A    1.340
B    1.005
C    1.280
Name: AveragePrice, dtype: float64

因此,要进行绘图,您需要将groupby调用中的输出转换回pd.DataFrame。没有这些列,就无法将xy分配给列,因为没有这样的列。您将收到此错误:

KeyError: 'region'

使用.reset_index()

({df1 = df.groupby(['region'])['AveragePrice'].mean().reset_index()

  region  AveragePrice
0      A         1.340
1      B         1.005
2      C         1.280

因此,您在这里得到pd.DataFrame,可以像上一个代码块一样对其进行操作(将x分配给一列,y分配给另一列,依此类推)。这样,您的代码将完成,并在region上显示x值的条形图,并在region上显示每个y的所有值的平均值。