Dividir el marco de datos de pandas según los valores de una columna usando groupby

Resuelto user308827 asked hace 10 años • 6 respuestas

Quiero dividir el siguiente marco de datos según la columna ZZ

df = 
        N0_YLDF  ZZ        MAT
    0  6.286333   2  11.669069
    1  6.317000   6  11.669069
    2  6.324889   6  11.516454
    3  6.320667   5  11.516454
    4  6.325556   5  11.516454
    5  6.359000   6  11.516454
    6  6.359000   6  11.516454
    7  6.361111   7  11.516454
    8  6.360778   7  11.516454
    9  6.361111   6  11.516454

Como resultado, quiero una columna nueva DataFramecon la N0_YLDFcolumna dividida en 4, una columna nueva para cada valor único de ZZ. ¿Cómo hago esto? Puedo hacer groupby, pero no sé qué hacer con el objeto agrupado.

user308827 avatar May 16 '14 08:05 user308827
Aceptado
gb = df.groupby('ZZ')    
[gb.get_group(x) for x in gb.groups]
qwwqwwq avatar May 16 '2014 01:05 qwwqwwq

Existe otra alternativa, ya que groupby devuelve un generador; simplemente podemos usar una lista por comprensión para recuperar el segundo valor (el marco).

dfs = [x for _, x in df.groupby('ZZ')]
Anton vBR avatar Jun 14 '2018 22:06 Anton vBR

En R existe un método de marco de datos llamado división. Esto es para todos los usuarios de R:

def split(df, group):
     gb = df.groupby(group)
     return [gb.get_group(x) for x in gb.groups]
Jeff Mandell avatar Mar 13 '2017 02:03 Jeff Mandell