multiple groupby group_by example dataframegroupby columns python group-by pandas dataframe

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