es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hacer una lista después de agrupar en Pandas utilizando la función apply().

Tengo este dataframe:

c1 c2
0 B 1
1 A 2
2 B 5
3 A 3
4 A 7

Mi objetivo es hacer un seguimiento de los valores en la columna 2, según las letras de la columna 1 separadas por “:”. El resultado debe verse así:

    c1  list
0   A   2:3:7<br>
1   B   1:5

¿Cuál es la forma más “pythonic” de hacer esto?
Actualmente puedo agrupar por la columna 1 y estoy intentando usar la función apply(), pero no sé cómo hacer el mapeo y crear esta lista en la nueva columna.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, puede utilizar la función groupby() de pandas para agrupar los datos por valores en la columna 1 (c1), y luego utilizar la función apply() para aplicar una función lambda a cada grupo. La función lambda puede convertir los valores en la columna 2 (c2) a una lista y luego concatenar las cadenas de los elementos de la lista separados por “:”. El paso final es restablecer el índice y cambiar el nombre de las columnas para que coincidan con la salida deseada.

    Aquí está el código para implementar esto:

    import pandas as pd
    
    # crear el dataframe
    df = pd.DataFrame({'c1': ['B', 'A', 'B', 'A', 'A'], 'c2': [1, 2, 5, 3, 7]})
    
    # agrupar por la columna 1, aplicar una función lambda a cada grupo
    df = df.groupby('c1')['c2'].apply(lambda x: ':'.join(map(str, x))).reset_index()
    
    # cambiar el nombre de las columnas para que coincidan con la salida deseada
    df.columns = ['c1', 'lista']
    
    # imprimir el resultado
    print(df)
    

    Output:

      c1    lista
    0  A  2:3:7
    1  B     1:5
    

    Este código debería darle la salida deseada de manera pythonica utilizando funciones de pandas.

Comments are closed.