Dado un DataFrame de pandas con una columna que contiene valores list:

Month   Col2
01      ['a', 'b']
01      ['b']
01      ['a', 'c']
02      ['b', 'c']

¿Cómo puedo realizar un groupby basado en los elementos de la lista en una columna?

La .groupby(['Month', 'Col2']).size() resultante produciría:

Month    Col2   size 
01       'a'    2
01       'b'    2
01       'c'    1
02       'b'    1
02       'c'    1

Nota: los valores Col2 se "desempaquetaron" para agrupar ...

Gracias de antemano por su consideración y respuesta.

1
Ramon J Romero y Vigil 3 oct. 2019 a las 17:24

3 respuestas

La mejor respuesta

Podemos usar explode después de pandas 0.25.0

df.explode('Col2').groupby(['Month','Col2']).size()
4
YOBEN_S 3 oct. 2019 a las 14:30

Uso:

df.explode('Col2').groupby(['Month','Col2']).size().reset_index(name='size')


  Month Col2   size
0    01    a      2
1    01    b      2
2    01    c      1
3    02    b      1
4    02    c      1
1
ansev 3 oct. 2019 a las 14:32

Otra forma un poco más detallada (para personas con pandas <0.25.0 como yo) puede hacerlo es descomprimir su columna de lista con df.itertuples () y luego groupby:

data = [[i[1], col2] for i in df.itertuples() for col2 in i[2]]
df_data = pd.DataFrame(data = data, columns = df.columns).groupby(['Month', 'Col2']).size().reset_index(name='size')
print(df_data)

Salida:

  Month Col2  size
0    01    a     2
1    01    b     2
2    01    c     1
3    02    b     1
4    02    c     1
1
d_kennetz 3 oct. 2019 a las 15:01
58221217