为分组数据框绘制图
Draw plot for a grouped data frame
我有一个问题,我需要为包含 factory_name 和 YYYY 格式的日期的数据绘制图表。我需要有一个图,其中包含每个 factory_name 的值、sold/bought 的部分总和以及每年每个部分的平均值。
我试过这样做:
pd.pivot_table(df.reset_index(),
index='Year', columns='factory_name', values='Demand').plot()
这没关系,但是我没有每个 factory_name 需求的平均值,我只能在数据框中得到,我不知道如何将这个结果添加到我的图中。
df.groupby(['factory_name','Year']).agg(['sum','mean'])
这是创建数据框的代码:
df = pd.DataFrame({'factory_name' : ['A','B','A','B','A','B','B','A','B','A','A','A'],
'Year': [2001,2002,2003,2001,2002,2003,2002,2003,2003,2003,2003,2003],
'Demand': [100,200,-20,40,30,50,100,200,50,-100,40,50]})
感谢帮助!
colors = ["brown", "darkgreen"]
plt.figure(figsize=(12,8))
for factory, color in zip(df.factory_name.unique(), colors):
s = df.loc[df.factory_name==factory].groupby("Year").Demand.mean()
plt.plot(
s.index,
s.values,
color=color,
linewidth=2,
alpha=.5,
label="%s mean"%factory
)
for factory, color in zip(df.factory_name.unique(), colors):
s = df.loc[df.factory_name==factory].groupby("Year").Demand.sum()
plt.plot(
s.index,
s.values,
color=color,
linewidth=4,
alpha=.25,
label="%s sum"%factory
)
plt.ylim(0,500)
plt.xticks(df.Year.unique())
plt.xlabel("year")
plt.legend()
plt.show()
编辑:
我编辑了代码以扩大图形大小并添加图例。
输出:
我有一个问题,我需要为包含 factory_name 和 YYYY 格式的日期的数据绘制图表。我需要有一个图,其中包含每个 factory_name 的值、sold/bought 的部分总和以及每年每个部分的平均值。
我试过这样做:
pd.pivot_table(df.reset_index(),
index='Year', columns='factory_name', values='Demand').plot()
这没关系,但是我没有每个 factory_name 需求的平均值,我只能在数据框中得到,我不知道如何将这个结果添加到我的图中。
df.groupby(['factory_name','Year']).agg(['sum','mean'])
这是创建数据框的代码:
df = pd.DataFrame({'factory_name' : ['A','B','A','B','A','B','B','A','B','A','A','A'],
'Year': [2001,2002,2003,2001,2002,2003,2002,2003,2003,2003,2003,2003],
'Demand': [100,200,-20,40,30,50,100,200,50,-100,40,50]})
感谢帮助!
colors = ["brown", "darkgreen"]
plt.figure(figsize=(12,8))
for factory, color in zip(df.factory_name.unique(), colors):
s = df.loc[df.factory_name==factory].groupby("Year").Demand.mean()
plt.plot(
s.index,
s.values,
color=color,
linewidth=2,
alpha=.5,
label="%s mean"%factory
)
for factory, color in zip(df.factory_name.unique(), colors):
s = df.loc[df.factory_name==factory].groupby("Year").Demand.sum()
plt.plot(
s.index,
s.values,
color=color,
linewidth=4,
alpha=.25,
label="%s sum"%factory
)
plt.ylim(0,500)
plt.xticks(df.Year.unique())
plt.xlabel("year")
plt.legend()
plt.show()
编辑: 我编辑了代码以扩大图形大小并添加图例。
输出: