Python - Consulta sobre error en cód Python

 
Vista:

Consulta sobre error en cód Python

Publicado por Guillermo (2 intervenciones) el 13/10/2021 07:09:33
Saludos estimados!

Me gustaría que me apoyaran en la corrección de este código para el siguiente caso:

Descripción del problema

Una plataforma web que vende y distribuye modelos tridimensionales
para su uso en proyectos de arquitectura tiene información sobre cada
venta que han tenido los modelos publicados. A partir de esa
información, ellos quieren que tú los ayudes a calcular estadísticas
sobre cada modelo.

Tu tarea será construir la función calcular_estadisticas que recibe
un DataFrame con la información de las descargas y retorna un DataFrame
con las estadísticas.

El DataFrame de entrada tendrá una fila con la información de cada
descarga: el nombre del modelo descargado, el nombre del usuario que la
descargó, el dinero en dólares que pagó por el modelo (número decimal),
la cantidad de estrellas (entre 1 y 5) que el usuario le dio al modelo
(número decimal) y si dejó o no un comentario sobre el modelo después de
haberlo descargado (valor booleano). El precio de un modelo particular
podría ser diferente entre descargas porque la plataforma suele hacer
promociones y porque los artistas que los crean pueden modificar el
precio cuando ellos quieran. El precio podría ser 0 en algunas
descargas, pero esos registros no se deberá tener en cuenta.

El siguiente es un ejemplo de un DataFrame que muestra los nombres de
las columnas y posibles valores que puede haber en el DataFrame.


El DataFrame que retorna la función tiene que tener una fila por cada
modelo. El DataFrame tendrá 7 columnas: CANTIDAD, que tendrá un número
entero con la cantidad de descargas que haya tenido el modelo; PROMEDIO,
que tendrá un número decimal con la cantidad promedio que se pagó por
el modelo; MAXIMO que tendrá un número decimal con la cantidad máxima
que se pagó por el modelo; MINIMO que tendrá un número decimal con la
cantidad mínima que se pagó por el modelo; ESTRELLAS, que tendrá un
número decimal con la cantidad promedio de estrellas que se le dio al
modelo; DESV. ESTRELLAS, que tendrá un número decimal con la desviación
estándar de la cantidad de estrellas que se le hayan dado al modelo; y
COMENTARIOS, que tendrá un número entero con la cantidad de comentarios
que hayan dejado los compradores.

Notas importantes sobre el DataFrame resultado:

El índice del DataFrame tendrá los nombres de los modelos y sólo
deben aparecer aquellos para los que al menos un usuario haya pagado. Es
decir que no deben aparecer los modelos que hayan sido siempre
gratuitos.

Los modelos deben aparecer en orden alfabético de acuerdo a su nombre.

Todos los números que no sean enteros deben aparecer redondeados a dos cifras decimales.

Como la desviación estándar no se puede calcular cuando haya
sólo un dato, en lugar de NaN debe aparecer 0.0 en el resultado.

El siguiente es el ejemplo del DataFrame con las estadísticas calculado a partir del DataFrame de descargas mostrado arriba:


Función requerida

Tu solución debe tener una función de acuerdo con la siguiente especificación.






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
 
def calcular_estadisticas(descargas:pd.DataFrame)->pd.DataFrame:
    pagado=descargas[descargas["Pago"]>0]
 
cols = ["modelo","usuario","Pago","estrellas","Comentario"]
data = [
        ["Bus urbano","ted mobys",24.99,5,True],
        ["carrito","christian",12,3.5,False],
        ["piano","michael",0,4,False],
        ["piano","otro wey",0,4.5,False],
        ["Bus urbano","ted mobys",20,2,True]
]
 
df = pd.DataFrame(data,columns=cols)
 
df["Comentario"] = df["Comentario"].apply(lambda x: int(x))
 
 
count_comentarios = list(df.groupby(["Comentario"]).sum())
cantidad = list(df.groupby(["Comentario"]).count())
prom = list(df.groupby(["Pago", "estrellas"]).mean())
min,max = list(df.groupby(["Pago"]).min()) , list(df.groupby(["Pago"]).max())
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta sobre error en cód Python

Publicado por dsua (1 intervención) el 07/05/2022 08:39:12
Encontraste la solución?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta sobre error en cód Python

Publicado por Mauricio Maroto (2 intervenciones) el 22/05/2022 02:41:35
Pudiste resolverlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sobre error en cód Python

Publicado por jh (1 intervención) el 30/10/2022 00:36:40
import pandas as pd

def calcular_estadisticas(descargas:pd.DataFrame)->pd.DataFrame:
pagado=descargas[descargas["Pago"]>0]
cols = ["modelo","usuario","Pago","estrellas","Comentario"]
data = [
["Bus urbano","ted mobys",24.99,5,True],
["carrito","christian",12,3.5,False],
["piano","michael",0,4,False],
["piano","otro wey",0,4.5,False],
["Bus urbano","ted mobys",20,2,True]
]
df = pd.DataFrame(data,columns=cols)
df["Comentario"] = df["Comentario"].apply(lambda x: int(x))
count_comentarios = list(df.groupby(["Comentario"]).sum())
cantidad = list(df.groupby(["Comentario"]).count())
prom = list(df.groupby(["Pago", "estrellas"]).mean())
min,max = list(df.groupby(["Pago"]).min()) , list(df.groupby(["Pago"]).max())
return pd.DataFrame
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sobre error en cód Python

Publicado por diego (1 intervención) el 02/12/2022 01:27:49
import pandas as pandas

def calcular_estadisticas(descargas:pandas.DataFrame)->pandas.DataFrame:

descargas=descargas[descargas['PAGO']>0]

descargas=descargas.groupby("MODELO")

can=descargas["USUARIO"].count()

prom1=descargas["PAGO"].mean()
prom2=descargas["ESTRELLAS"].mean()

xt=descargas["COMENTARIO"].sum()

d=descargas["ESTRELLAS"].std()

maxx=descargas["PAGO"].max()

minn=descargas["PAGO"].min()

est={'CANTIDAD':can,'PROMEDIO':prom1,'MAXIMO':maxx,'MINIMO':minn, 'ESTRELLAS':prom2,'DESV. ESTRELLAS':d,"COMENTARIOS":xt}

est=pandas.DataFrame(est)

est=est.round({'PROMEDIO':2, 'ESTRELLAS':2, 'DESV. ESTRELLAS':2})

est.fillna(0,inplace=True)

return est
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sobre error en cód Python

Publicado por Nag a Ram (1 intervención) el 22/04/2024 18:07:55
import pandas as pd

def calcular_estadisticas(descargas: pd.DataFrame) -> pd.DataFrame:
data = descargas[descargas["PAGO"] != 0]

cant = data.groupby("MODELO")["PAGO"].count()
prom = data.groupby("MODELO")["PAGO"].mean()
estr = data.groupby("MODELO")["ESTRELLAS"].mean()
desv = data.groupby("MODELO")["ESTRELLAS"].std().fillna(0.0)
mayor = data.groupby("MODELO")["PAGO"].max()
menor = data.groupby("MODELO")["PAGO"].min()
comentarios = data[data["COMENTARIO"] == True].groupby("MODELO")["COMENTARIO"].count().fillna(0)

datos = {"CANTIDAD": cant, "PROMEDIO": prom, "MAXIMO": mayor, "MINIMO": menor, "ESTRELLAS": estr, "DESV. ESTRELLAS": desv, "COMENTARIOS": comentarios}
solucion = round(pd.DataFrame(datos).fillna(0), 2)

return solucion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta sobre error en cód Python

Publicado por Heidy Paulin Diaz Castro (1 intervención) el 15/05/2024 16:04:52
Después de intentarlo 1000 veces, y viendo los códigos de referencia, encontré que este es el código correcto:

**** Muchas gracias Nag a Ram, logré hacerlo gracias a tu base****


import pandas as pd

# Definición de la función para calcular estadísticas
def calcular_estadisticas(descargas: pd.DataFrame) -> pd.DataFrame:
data = descargas[descargas["PAGO"] != 0]
cant = data.groupby("MODELO")["PAGO"].count()
prom = data.groupby("MODELO")["PAGO"].mean()
estr = data.groupby("MODELO")["ESTRELLAS"].mean()
desv = data.groupby("MODELO")["ESTRELLAS"].std().fillna(0.0)
mayor = data.groupby("MODELO")["PAGO"].max()
menor = data.groupby("MODELO")["PAGO"].min()
comentarios = data[data["COMENTARIO"] == True].groupby("MODELO")["COMENTARIO"].count().fillna(0)

datos = {"CANTIDAD": cant, "PROMEDIO": prom, "MAXIMO": mayor, "MINIMO": menor,
"ESTRELLAS": estr, "DESV. ESTRELLAS": desv, "COMENTARIOS": comentarios}
solucion = pd.DataFrame(datos).fillna(0)
return round(solucion, 2)

# Datos de prueba
datos = {
'MODELO': ['Bus urbano #27', 'Silla tipo bar', 'Piano', 'Fuente con flores', 'Bus urbano #27', 'Puesto de Yogurt', 'Playground', 'Bus urbano #27', 'LeCorbusier_2020'],
'USUARIO': ['Ted Mosby', 'Art Vandelay', 'Art Vandelay', 'Michael', 'Mark Brendanawicz', 'Michael', 'Mark Brendanawicz', 'LeCorbusier_2020', 'LeCorbusier_2020'],
'PAGO': [24.99, 4.99, 4.99, 0, 12, 0, 14, 0, 0],
'ESTRELLAS': [5, 3.5, 3.5, 5, 4, 5, 4.5, 1, 1],
'COMENTARIO': [True, False, False, True, True, True, True, True, True]
}

df = pd.DataFrame(datos)

# Calculando estadísticas
resultado = calcular_estadisticas(df)
print(resultado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar