groupby 多个值,并绘制结果
groupby multiple values, and plotting results
我正在使用一些有关杀菌剂使用情况的数据,其中包含年份、杀菌剂、使用量以及熊猫 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,
...
我想要的是随着时间的推移使用的总杀菌剂的单一图,为每种单独的杀菌剂绘制一条线(不同颜色)。我使用 .groupby 获取每年使用的每种杀菌剂的总量:
apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum()
这给了我想要绘制的值,例如:
Year, Fungicide, Value
...
2009, A, 128635
B, 104765
2011, A, 154829
B, 129865
现在我需要绘制它,以便 每种杀真菌剂(A、B、...)在 的 值超过时间
有没有办法做到这一点而不把它们全部分开?请原谅我的无知,我是 python 的新手,并且还在逐渐熟悉它。
大致如下:
df_grouped = df.groupby('Fungicide')
for key, group in df_grouped:
group.groupby('Year')['Value'].sum().plot(ax=ax,label=key)
通过在 groupby 对象上使用 for 循环,将遍历每个组,分配键(例如 'A' 或 'B',作为分组依据的列的值),以及组每次数据帧。
示例见此处
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-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()
对于subplots
,只需将相应的keyword
设置为True
:
plot_df.plot(subplots=True)
获得:
你可以这样做:
import matplotlib
matplotlib.style.use('ggplot')
import matplotlib.pyplot as plt
plt.figure()
df.groupby(['Year','Fungicide']).sum().unstack().plot()
数据
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
我正在使用一些有关杀菌剂使用情况的数据,其中包含年份、杀菌剂、使用量以及熊猫 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,
...
我想要的是随着时间的推移使用的总杀菌剂的单一图,为每种单独的杀菌剂绘制一条线(不同颜色)。我使用 .groupby 获取每年使用的每种杀菌剂的总量:
apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum()
这给了我想要绘制的值,例如:
Year, Fungicide, Value
...
2009, A, 128635
B, 104765
2011, A, 154829
B, 129865
现在我需要绘制它,以便 每种杀真菌剂(A、B、...)在 的 值超过时间
有没有办法做到这一点而不把它们全部分开?请原谅我的无知,我是 python 的新手,并且还在逐渐熟悉它。
大致如下:
df_grouped = df.groupby('Fungicide')
for key, group in df_grouped:
group.groupby('Year')['Value'].sum().plot(ax=ax,label=key)
通过在 groupby 对象上使用 for 循环,将遍历每个组,分配键(例如 'A' 或 'B',作为分组依据的列的值),以及组每次数据帧。
示例见此处
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-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()
subplots
,只需将相应的keyword
设置为True
:
plot_df.plot(subplots=True)
获得:
你可以这样做:
import matplotlib
matplotlib.style.use('ggplot')
import matplotlib.pyplot as plt
plt.figure()
df.groupby(['Year','Fungicide']).sum().unstack().plot()
数据
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