python - examples - Trazado de resultados de Pandas GroupBy
python group by example (1)
Creo que @herrfz tocó todos los puntos altos. Voy a detallar los detalles:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
sin = np.sin
cos = np.cos
pi = np.pi
N = 100
x = np.linspace(0, pi, N)
a = sin(x)
b = cos(x)
df = pd.DataFrame({
''A'': [True]*N + [False]*N,
''B'': np.hstack((a,b))
})
for key, grp in df.groupby([''A'']):
plt.plot(grp[''B''], label=key)
grp[''D''] = pd.rolling_mean(grp[''B''], window=5)
plt.plot(grp[''D''], label=''rolling ({k})''.format(k=key))
plt.legend(loc=''best'')
plt.show()
Estoy empezando a aprender Pandas y estoy tratando de encontrar la forma más pitonica (¿o panda-thonic?) De hacer ciertas tareas.
Supongamos que tenemos un DataFrame con las columnas A, B y C.
- La columna A contiene valores booleanos: el valor A de cada fila es verdadero o falso.
- La columna B tiene algunos valores importantes que queremos trazar.
Lo que queremos descubrir son las diferencias sutiles entre los valores B para las filas que tienen A set set to false, frente a los valores B para las filas que tienen A es verdadero.
En otras palabras, ¿cómo puedo agrupar por el valor de la columna A (ya sea verdadero o falso), y luego graficar los valores de la columna B para ambos grupos en el mismo gráfico? Los dos conjuntos de datos deben colorearse de forma diferente para poder distinguir los puntos.
A continuación, agreguemos otra función a este programa: antes de graficar, queremos calcular otro valor para cada fila y almacenarlo en la columna D. Este valor es la media de todos los datos almacenados en B durante los cinco minutos previos a un registro, pero solo incluimos filas que tienen el mismo valor booleano almacenado en A.
En otras palabras, si tengo una fila donde A=True
y time=t
, quiero calcular un valor para la columna D que es la media de B para todos los registros desde el tiempo t-5
hasta t
que tienen el mismo A=True
.
En este caso, ¿cómo podemos ejecutar groupby sobre los valores de A, luego aplicar este cálculo a cada grupo individual y finalmente trazar los valores D para los dos grupos?