我一直遇到一个问题,即我按某些列对数据进行分组,但是我无法弄清楚如何按已分组的数据进行绘图。
例如
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
这给了我一个关键错误。 ^
答案 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
。没有这些列,就无法将x
和y
分配给列,因为没有这样的列。您将收到此错误:
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
的所有值的平均值。