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.

Encuentra las categorías que ocurren frecuentemente juntas basándose en otra columna.

Considere que tengo los siguientes datos en un dataframe de Pandas:

| ID del artículo | ID del autor |
| -------------- | ------------ |
| Artículo1      | Autor1       |
| Artículo1      | Autor2       |
| Artículo2      | Autor2       |
| Artículo3      | Autor1       |
| Artículo3      | Autor2       |
| Artículo3      | Autor3       |
| Artículo4      | Autor1       |
| Artículo4      | Autor3       |

Necesito encontrar el número de colaboraciones no nulas. Por lo tanto, la salida debería ser:

(Autor1,Autor2) –> 2
(Autor1,Autor3) –> 1

Se agradece cualquier ayuda o consejo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puedes obtener el resultado deseado utilizando la función groupby del dataframe de pandas junto con el método apply para contar el número de pares únicos de autores que han trabajado en un mismo artículo. Aquí tienes un ejemplo de código:

    import pandas as pd
    
    # creando el dataframe de entrada
    df = pd.DataFrame({
            'ID del artículo':['Articulo_1', 'Articulo_1', 'Articulo_2', 'Articulo_3', 'Articulo_3', 'Articulo_3', 'Articulo_4', 'Articulo_4'],
            'ID del autor':['Autor_1', 'Autor_2', 'Autor_2', 'Autor_1', 'Autor_2', 'Autor_3', 'Autor_1', 'Autor_3']
          })
    
    # utilizando la función groupby para agrupar los datos por 'ID del artículo' y luego aplicando una función para contar 
    # el número de pares únicos de autores que han trabajado en un mismo artículo
    colaboraciones_df = df.groupby('ID del artículo')['ID del autor'].apply(lambda x: pd.DataFrame(list(combinations(x, 2)))) \
                            .reset_index(level=1, drop=True).reset_index()
    
    # cambiando los nombres de las columnas del dataframe de salida
    colaboraciones_df.columns = ['Autor1', 'Autor2']
    
    # utilizando la función groupby en colaboraciones_df para contar el número de colaboraciones no nulas 
    output_df = colaboraciones_df.groupby(['Autor1', 'Autor2']).size().reset_index(name='Conteo de colaboraciones')
    output_df = output_df[output_df['Conteo de colaboraciones'] != 0]
    

    El dataframe de salida resultante output_df tendrá dos columnas – Autor1 y Autor2, y una tercera columna que indica el número de colaboraciones entre Autor1 y Autor2. Puedes imprimirlo utilizando print(output_df) para obtener el resultado deseado:

        Autor1    Autor2 Conteo de colaboraciones
    0  Autor_1  Autor_2                       2
    1  Autor_1  Autor_3                       1
    

    Este código resolverá tu problema y producirá el resultado deseado.

Comments are closed.