python - groupby - pandas group by multiple columns
Gráfico de caja con pandas groupby (3)
Ok, tengo un marco de datos que contiene datos de series temporales que tienen un índice de varias líneas para cada columna. Aquí hay una muestra de cómo se ven los datos y está en formato csv. Cargar los datos no es un problema aquí.
Lo que quiero hacer es poder crear un diagrama de caja con estos datos agrupados de acuerdo a diferentes categorías en una línea específica del multiinín. Por ejemplo, si tuviera que agruparme por ''ESPECIES'' tendría los grupos, ''aq'', ''gr'', ''mix'', ''sed'' y un cuadro para cada grupo en un momento específico de la serie temporal.
He intentado esto:
grouped = data[''2013-08-17''].groupby(axis=1, level=''SPECIES'')
grouped.boxplot()
pero me da un diagrama de caja (línea plana) para cada punto del grupo en lugar de para el conjunto agrupado. ¿Hay una forma fácil de hacer esto? No tengo ningún problema de agrupación, ya que puedo agregar los grupos de la forma que quiera, pero no estoy seguro de qué estoy haciendo mal con este diagrama de caja.
Cualquier ayuda sería apreciada.
Creo que lo descubrí, tal vez esto sea útil para alguien:
grouped = data[''2013-08-17''].groupby(axis=1, level=''SPECIES'').T
grouped.boxplot()
Básicamente, la salida groupby debía transponerse para que el diagrama de caja mostrara el agrupamiento correcto:
Esto debería funcionar en la versión 0.16:
data[''2013-08-17''].boxplot(by=''SPECIES'')
este código:
data[''2013-08-17''].boxplot(by=''SPECIES'')
No funcionará, ya que boxplot es una función para un DataFrame y no una serie.
Mientras que en Pandas> 0.18.1, la función boxplot tiene los argumentos columns
que definen de qué columna se toman los datos.
Asi que
data.boxplot(column=''2013-08-17'',by=''SPECIES'')
Debe devolver el resultado deseado.
Un ejemplo con el conjunto de datos Iris:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(''https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv'')
fig, ax = plt.subplots(figsize=(10,8))
plt.suptitle('''')
data.boxplot(column=[''SepalLength''], by=''Name'', ax=ax)
crea:
plt.suptitle('''')
Desactiva los molestos subtítulos automáticos. Y, por supuesto, los argumentos de la columna aceptan listas de columnas ... así que
data.boxplot(column=[''SepalLength'', ''SepalWidth''], by=''Name'', ax=ax)
tambien funciona