usar tablas para multiple leer groupby funciones example datos como columns python pandas

python - tablas - pandas merge



agrupando filas en la lista en pandas groupby (3)

Tengo un marco de datos de pandas como:

A 1 A 2 B 5 B 5 B 4 C 6

Quiero agrupar en la primera columna y obtener la segunda columna como listas en filas:

A [1,2] B [5,5,4] C [6]

¿Es posible hacer algo como esto usando pandas groupby?


Como groupby método groupby de un objeto pd.DataFrame puede hacer el trabajo.

Ejemplo

L = [''A'',''A'',''B'',''B'',''B'',''C''] N = [1,2,5,5,4,6] import pandas as pd df = pd.DataFrame(zip(L,N),columns = list(''LN'')) groups = df.groupby(df.L) groups.groups {''A'': [0, 1], ''B'': [2, 3, 4], ''C'': [5]}

que da una descripción de los grupos en forma de índice

Para obtener elementos de grupos individuales, puede hacer, por ejemplo

groups.get_group(''A'') L N 0 A 1 1 A 2 groups.get_group(''B'') L N 2 B 5 3 B 5 4 B 4


Puede hacerlo usando groupby para agrupar en la columna de interés y luego apply list a cada grupo:

In [1]: # create the dataframe df = pd.DataFrame( {''a'':[''A'',''A'',''B'',''B'',''B'',''C''], ''b'':[1,2,5,5,4,6]}) df Out[1]: a b 0 A 1 1 A 2 2 B 5 3 B 5 4 B 4 5 C 6 [6 rows x 2 columns] In [76]: df.groupby(''a'')[''b''].apply(list) Out[76]: a A [1, 2] B [5, 5, 4] C [6] Name: b, dtype: object


Si el rendimiento es importante baje al nivel numpy:

import numpy as np df = pd.DataFrame( {''a'':np.random.randint(0,60,600), ''b'':[1,2,5,5,4,6]*100}) def f(df): keys,values=df.sort_values(''a'').values.T ukeys,index=np.unique(keys,True) arrays=np.split(values,index[1:]) df2=pd.DataFrame({''a'':ukeys,''b'':[list(a) for a in arrays]}) return df2

Pruebas:

In [301]: %timeit f(df) 1000 loops, best of 3: 1.64 ms per loop In [302]: %timeit df.groupby(''a'')[''b''].apply(list) 100 loops, best of 3: 5.26 ms per loop