Stack Overflow en español Asked by frnndovelasco on January 6, 2022
Tengo un dataframe con los siguientes datos
price neighbourhood
0 $2,331.00 San Rafael
1 $4,457.00 Roma Norte
2 $809.00 San Rafael
3 $1,932.00 Roma Norte
4 $1,364.00 Coyoacán
5 $1,202.00 Coyoacán
Busco crear un nuevo dataframe que contenga en una columna el agrupamiento de los valores de "neighbourhood" (sólo una fila por valor único) y en otras columnas el promedio, la media, los percentiles y la moda de ser posible de los datos en la columna "price". Algo así
He logrado sacar los datos individuales por valor en "neighbourhood" creando filtros con iloc, pero no he encontrado la forma de hacerlo todo en un conjunto en un mismo dataframe, sin la necesidad de pegar los dataframes que ya hice (puesto que tengo más de mil registros únicos). Por lo que buscaba la forma de hacerlo todo de una sentada, de ser posible, claro.
Para sacar los datos que busco sólo lo he logrado colonia por colonia en un dataframe diferente, con este código
df_roma_norte = df[df["neighbourhood] == "Roma Norte"]
df_roma_norte[df_roma_norte.columns[0:1]] = df_roma_norte[df_roma_norte.columns[0:1]].replace('[$,]', '', regex=True).astype(float)
df_roma_norte.describe()
Y lo que sale
price
count 1747.000000
mean 1524.350887
std 2843.552880
min 0.000000
25% 591.000000
50% 1083.000000
75% 1716.000000
max 98381.00000
lo copio y lo pego de manera manual, haciendo esto para cada uno de los datos únicos que tengo en la columna "neighbourhood". Termino con cientos de dataframes. Muy poco práctico. No he podido lograr que las operaciones que pandas logra en un describe() apliquen para datos agrupados como valores únicos en mi columna "neighbourhood".
Lo que yo busco es obtener esto, donde Pandas hizo las operaciones agrupando todos los valores de "neighbourhood" y haciendo las operaciones en describe, pero no para todo el dataframe, sino para los grupos de datos de "neighbourhood" (Los percentiles y promedios de los precios de San Rafael, los percentiles y promedios de Roma Norte, etc:
neighbourhood mean 25% 50% 75% etc
San Rafael 1570 100 500 1200
Roma Norte 3194.5 200 600 1500
Coyoacán 1283 50 400 1000
Saludos y gracias de antemano.
Encontré una respuesta un poco más práctica a mi propia pregunta.
Tendría que agrupar los valores y a partir de ello crear una operación. Lo malo es que la operación tiene que hacerse por cada resultado que busque (promedio, moda, mediana, etc). Lo bueno es que con eso se reduce mucho el número de dataframes que tengo que crear (por colonia eran cientos, de esta forma son como mínimo 5).
df_colonia_y_precio = df[["price","neighbourhood"]]
df_promedio = df_colonia_y_precio.groupby("neighbourhood", as_index=False).mean()
df_mediana = df_colonia_y_precio.groupby("neighbourhood", as_index=False).median()
df_totales = df_colonia_y_precio.groupby("neighbourhood", as_index=False).count()
df_todos_los_datos = pd.merge(df_promedio, df_mediana, on="neighbourhood")
df_todos_los_datos = pd.merge(df_todos_los_datos, df_totales, on ="neighbourhood")
df_todos_los_datos.columns= ["colonia", "promedio", "mediana", "total_de_espacios"]
Y esto devuelve este dataframe:
colonia promedio mediana total_de_espacios
0 Acacias/Actipan 1072.402597 646.0 77
1 Alamos 589.680851 490.0 141
2 Americas Unidos/Del Lago 619.897436 446.0 39
3 Anzures 1178.327451 1048.0 510
4 Asturias 600.603448 495.0 36
Muchas gracias a todos.
Answered by frnndovelasco on January 6, 2022
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP