Estoy tratando de ajustar mi cerebro alrededor de las estructuras de datos pandas
y tratar de usarlas con ira un poco. He descubierto que las operaciones groupby
dan como resultado un objeto de la serie pandas. Pero no puedo entender cómo usar la serie resultante. En particular, quiero hacer dos cosas:Unirme a una serie de Pandas con un índice jerárquico de vuelta a la fuente DataFrame
1) "unen" los resultados de vuelta a la trama de datos inicial
2) seleccione un valor específico de la serie resultante basado en el índice jerárquico.
Aquí está un ejemplo de juguete para trabajar con:
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
dfGrouped = df.groupby(["group1", "group2"] , sort=True)
## toy function, obviously not my real function
def fun(x): return mean(x**2)
results = dfGrouped.apply(lambda x: fun(x.value1))
por lo que las resultantes de la serie (resultados) tiene este aspecto:
group1 group2
a c 2.605
d 9.000
b d 20.500
e 36.000
Eso tiene sentido. Pero, ¿cómo hacer que:
1) se unen a esta vuelta a la trama de datos originales df
2) Seleccionar un valor único, donde, por ejemplo, grupo1 == 'B' & grupo2 == 'd'
Parece exactamente lo que estaba tratando de hacer. Ese es un buen ejemplo de cómo establecer el índice. No me di cuenta cómo funciona eso. –
@ wouter-overmeire - muy agradable. Estuve luchando con esto hoy. – John
@ wouter-overmeire, @ jd-long - ¿Cómo funcionaría esto si se tuviera que agregar más de un resultado al DataFrame? Por ejemplo, ¿cómo podrían los resultados de dos funciones separadas, p. 'def UCL (x): return mean (x2) + np.std * 2' y' def LCL (x): return mean (x2) -np.std * 2' se pasa a df? ¿O hay un mejor camino? – John