A. *_*eld 10 python group-by matplotlib data-analysis pandas
我正在使用一些关于杀菌剂使用的数据,其中包括年份,杀菌剂,使用量以及熊猫DataFrame中的一些不相关的列.看起来有点像:
Year, State, Fungicide, Value
2011, California, A, 12879
2011, California, B, 29572
2011, Florida, A, 8645
2011, Florida, B, 19573
2009, California, A, 8764
2009, California, B, 98643,
...
Run Code Online (Sandbox Code Playgroud)
我想要的是随着时间的推移使用的总杀菌剂的单个图,每个单独的杀真菌剂(以不同的颜色)绘制线.我用.groupby来获取每年使用的每种杀菌剂的总量:
apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum()
Run Code Online (Sandbox Code Playgroud)
这给了我想要绘制的值,例如:
Year, Fungicide, Value
...
2009, A, 128635
B, 104765
2011, A, 154829
B, 129865
Run Code Online (Sandbox Code Playgroud)
现在我需要绘制它让每个杀真菌剂(A,B,...)是一个图一个单独的行的价值随时间
有没有办法这样做而不将它全部分开?原谅我的无知,我是python的新手,我仍然熟悉它.
你可以做:
import matplotlib
matplotlib.style.use('ggplot')
import matplotlib.pyplot as plt
plt.figure()
df.groupby(['Year','Fungicide']).sum().unstack().plot()
Run Code Online (Sandbox Code Playgroud)
数据
Year State Fungicide Value
0 2011 California A 12879
1 2011 California B 29572
2 2011 Florida A 8645
3 2011 Florida B 19573
4 2009 California A 8764
5 2009 California B 98643
Run Code Online (Sandbox Code Playgroud)
大致如下:
df_grouped = df.groupby('Fungicide')
for key, group in df_grouped:
group.groupby('Year')['Value'].sum().plot(ax=ax,label=key)
Run Code Online (Sandbox Code Playgroud)
通过在 groupby 对象上使用 for 循环,将迭代每个组,每次分配键(例如“A”或“B”,分组所依据的列的值)和组数据帧。
请参阅此处的示例
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iteating-through-groups
对于一个干净的解决方案,妥善打印legend和xticks,你可以
apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum()
plot_df = apple_fplot.unstack('Fungicide').loc[:, 'Value']
plot_df.index = pd.PeriodIndex(plot_df.index.tolist(), freq='A')
plot_df.plot()
Run Code Online (Sandbox Code Playgroud)
对于subplots,只需将相应设置keyword为True:
plot_df.plot(subplots=True)
Run Code Online (Sandbox Code Playgroud)
要得到:
| 归档时间: |
|
| 查看次数: |
18816 次 |
| 最近记录: |