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.

Obtén los valores penúltimos de un grupo de pandas mediante “group by”.

Quiero agrupar un dataframe de pandas y obtener los últimos n elementos de cada grupo, pero con cualquier desplazamiento. Por ejemplo, después de agrupar por la columna A, tengo una columna “A” con elementos en la columna “B” con valores (1,2,3,4,5,6,7) para cierto valor en “A”. Y quiero tomar los últimos 10 elementos excluyendo uno o dos de los más recientes. ¿Cómo puedo hacerlo?
He intentado usar tail(), df.groupby('A').tail(10), pero ese no es mi caso.

input: ‘A’: [1,1,1,1,1,1,1,1,1,], ‘B’: [1,2,3,4,5,6,7,8,9] output: (last 3 excluding the recent 2) ‘A’ [1], ‘B’: [5,6,7]

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes usar la función groupby de pandas para agrupar los datos por la columna ‘A’ y luego aplicar una función para devolver el subconjunto deseado de los datos. Aquí hay un ejemplo de fragmento de código que debería hacer lo que estás buscando:

    import pandas as pd
    
    # datos de ejemplo de entrada
    df = pd.DataFrame({
        'A': [1,1,1,1,1,1,1,1,1],
        'B': [1,2,3,4,5,6,7,8,9]
    })
    
    # define una función para aplicar a cada grupo
    def last_n_except_recent(group, n, recent):
        return group.iloc[-n-recent:-recent]
    
    # aplica la función a cada grupo y concatena los resultados
    result = pd.concat([
        last_n_except_recent(group, n=3, recent=2)
        for key, group in df.groupby('A')
    ])
    
    print(result)
    

    Aquí, la función last_n_except_recent toma un grupo de datos, junto con el número de elementos a incluir y el número de elementos recientes a excluir, y devuelve el subconjunto deseado de los datos.

    El dataframe de resultado debería tener la columna ‘A’ como índice, con los subconjuntos correspondientes de la columna ‘B’ para cada grupo.

Comments are closed.