Tengo un conjunto de datos que se ve así, y hay instancias en las que hay múltiples duplicados (por ejemplo, Gone Girl se repite dos veces). No soy experto en Python, por lo que no tengo ningún código en este momento y he intentado buscar en stackoverflow.
Pero mi objetivo es:
Agradezco cualquier ayuda
| Nombre del libro | Autor | Opiniones de los usuarios |
|---|---|---|
| La vacante imprevista | J. K. Rowling | 4.9 |
| Cabin Fever (Diario de un niño Wimpy, Libro 6) | Jeff Kinney | 3.9 |
| harry potter | J. K. Rowling | 4.7 |
| Cabin Fever (Diario de un niño Wimpy, Libro 6) | Jeff Kinney | 4.4 |
| Chica se ha ido | Gillian Flynn | 4.0 |
| Chica se ha ido | Gillian Flynn | 4.0 |
| La chica del tren) | paula hawkins | 4.1 |
No estoy seguro de cómo le gustaría el formato de salida, pero aquí hay una forma de eliminar libros duplicados del mismo autor y devolver el puntaje promedio del autor después de la eliminación duplicada usando la biblioteca pandas:
import pandas as pd df = pd.read_csv('mydata.txt', sep='\t') # use this if it is a tab delimited text file df = pd.read_csv('mydata.csv') # use this if it is a comma separated value file subset = df.drop_duplicates(subset=['Book Name', 'Author']).groupby('Author').agg({"User Rating": "mean"}) print(subset)salidas:
User Rating Author Gillian Flynn 4.0 Feff Kinney 3.9 JK Rowling 4.8 Paula Hawkins 4.1Explicaciones:
Primero, estoy creando un marco de datos de pandas usando la biblioteca de pandas. Si los datos están en formato de texto delimitado por tabuladores, utilice la primera línea df = pd.read_csv('mydata.txt', sep='\t') para leer los datos. Si los datos están en formato de valores separados por comas, use la segunda línea df = pd.read_csv('mydata.csv') para leer los datos. Esto crea el marco de datos.
Luego, df.drop_duplicates elimina las entradas duplicadas en un marco de datos. Si selecciona un subset , buscará duplicados del subconjunto aprobado. Entonces, en este caso, pasé una lista de dos columnas donde quería colocar duplicados ['Book Name', 'Author'] . Cuando pasa varias columnas, ambas deben ser idénticas para que se cuente como un duplicado.
Luego, groupby por la columna 'Author' que realizará una agg o agregación, para obtener la mean de la columna User Rating , para cada 'Author' .
df.groupby(...).mean() 2 veces, para ser consistente si, para un autor, hay varios libros de los cuales algunos tienen múltiples calificaciones. Sin embargo, las especificaciones pueden diferir.
Calcule la nota media para cada pareja 'Autor', 'Nombre del libro'
Si para una pareja las calificaciones de los usuarios son las mismas, eso desperdicia algunos recursos sin brazo.
Calcular la nota media por autor
el código es:
df.groupby(['Author', 'Book Name']]).mean().groupby(['Author']).mean()con valor:
User Rating Author Gillian Flynn 4.00 JK Rowling 4.80 Jeff Kinney 4.15 Paula Hawkins 4.10