Saltar al contenido

Concatenar cadenas de varias filas usando Pandas groupby

Solución:

Puede agrupar por el 'name' y 'month' columnas, luego llame transform que devolverá datos alineados con el df original y aplicará una lambda donde join las entradas de texto:

In [119]:

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()
Out[119]:
    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

Subo el df original pasando una lista de las columnas de interés df[['name','text','month']] aquí y luego llamar drop_duplicates

EDITAR en realidad solo puedo llamar apply y luego reset_index:

In [124]:

df.groupby(['name','month'])['text'].apply(lambda x: ','.join(x)).reset_index()

Out[124]:
    name  month         text
0  name1     11       hej,du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite

actualizar

los lambda es innecesario aquí:

In[38]:
df.groupby(['name','month'])['text'].apply(','.join).reset_index()

Out[38]: 
    name  month         text
0  name1     11           du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite

podemos agrupar por las columnas “nombre” y “mes”, luego llame a las funciones agg () de los objetos DataFrame de Panda.

La funcionalidad de agregación proporcionada por la función agg () permite calcular múltiples estadísticas por grupo en un cálculo.

df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})

ingrese la descripción de la imagen aquí

La respuesta de EdChum le brinda mucha flexibilidad, pero si solo desea concatenar cadenas en una columna de objetos de lista, también puede:

output_series = df.groupby(['name','month'])['text'].apply(list)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *