web-dev-qa-db-ja.com

複数の値をグループ化し、結果をプロットする

私は、殺菌剤の使用に関するいくつかのデータを使用しています。これには、年、殺菌剤、使用量、およびpanda 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,
...

私が求めているのは、長期にわたって使用された殺菌剤の1つのプロットで、個々の殺菌剤ごとに線が(異なる色で)プロットされています。私は.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に不慣れですが、まだそれに慣れています。

10
A. Chatfield

legendxticksを正しく出力するクリーンなソリューションの場合、

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()

enter image description heresubplotsの場合、それぞれのkeywordTrueに設定するだけです。

plot_df.plot(subplots=True)

取得するため:

enter image description here

8
Stefan

できるよ:

import matplotlib
matplotlib.style.use('ggplot')
import matplotlib.pyplot as plt

plt.figure()
df.groupby(['Year','Fungicide']).sum().unstack().plot()

enter image description here

データ

   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
9
Colonel Beauvel

何かに沿って:

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

3
Chris