我一直遇到一个问题,即我按某些列对数据进行分组,但我无法弄清楚如何按我分组的数据进行绘图。
例如,
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
这给了我一个关键错误。 ^
最佳答案
您需要将 .reset_index()
添加到 groupby
调用中。如果没有 pandas 就不可能有唯一的 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
) 到另一个,等等)。您的代码将完成并获得条形图,其中包含 x
上的 region
值以及 y
每个
.region
上所有值的平均值
关于python - 如何绘制按另一列分组的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55909193/