私は、殺菌剤の使用に関するいくつかのデータを使用しています。これには、年、殺菌剤、使用量、および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に不慣れですが、まだそれに慣れています。
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
何かに沿って:
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