Agrupar por múltiples valores, y graficar resultados.

Estoy usando algunos datos sobre el uso de fungicidas que tienen el Año, Fungicida, Cantidad utilizada, junto con algunas columnas irrelevantes en un DataFrame de panda. Parece algo así como:

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, ... 

Lo que quiero de él es una sola plot de fungicida total utilizada en el tiempo, con una línea trazada para cada fungicida individual (en un color diferente). He usado .groupby para obtener la cantidad total de cada fungicida que se usa cada año:

 apple_fplot = df.groupby(['Year','Fungicide'])['Value'].sum() 

Esto me da los valores que quiero trazar, algo así como:

 Year, Fungicide, Value ... 2009, A, 128635 B, 104765 2011, A, 154829 B, 129865 

Ahora necesito trazarlo para que cada fungicida (A, B, …) sea una línea separada en una sola gráfica de Valor a lo largo del tiempo.

¿Hay una manera de hacer esto sin separarlo todo? Perdona mi ignorancia, soy nuevo en Python y todavía me estoy familiarizando con él.

Para una solución limpia que imprima correctamente la legend y los xticks , podría

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

introduzca la descripción de la imagen aquí Para las subplots , simplemente configure la keyword respectiva en True :

 plot_df.plot(subplots=True) 

Llegar:

introduzca la descripción de la imagen aquí

Tu puedes hacer:

 import matplotlib matplotlib.style.use('ggplot') import matplotlib.pyplot as plt plt.figure() df.groupby(['Year','Fungicide']).sum().unstack().plot() 

introduzca la descripción de la imagen aquí

Datos

  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 

algo en la línea de:

 df_grouped = df.groupby('Fungicide') for key, group in df_grouped: group.groupby('Year')['Value'].sum().plot(ax=ax,label=key) 

Al utilizar el bucle for en un objeto groupby, se iterará a través de cada grupo, asignando la clave (por ejemplo, ‘A’ o ‘B’, los valores de la columna por la que se agrupó) y el dataframe del grupo cada vez.

Vea aquí para un ejemplo

http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups