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
0 Asked on December 2, 2020 by johnatan-de-leon
0 Asked on December 1, 2020 by juan-rondon
1 Asked on December 1, 2020 by brayan-gonzalez
1 Asked on December 1, 2020 by gabriel-lenzina
1 Asked on December 1, 2020 by rral
1 Asked on November 30, 2020
1 Asked on November 30, 2020 by mariana
4 Asked on November 30, 2020 by daro
0 Asked on November 29, 2020 by javier-maldonado
1 Asked on November 29, 2020 by g-4
1 Asked on November 29, 2020 by jose-herrada
3 Asked on November 29, 2020 by subte
0 Asked on November 29, 2020 by martn
1 Asked on November 28, 2020 by noty
0 Asked on November 27, 2020 by zacktagnan
2 Asked on November 27, 2020 by sergio
0 Asked on November 27, 2020 by galogarsa-channel
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP