Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Tablas dinámicas con Pivot Table

22/28
Recursos

Aportes 38

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

el link de la imagen del minuto 2:46

![](https://pandas-docs.github.io/pandas-docs-travis/_images/reshaping_pivot.png)

Estos datos dan la impresión de que los hombres fumadores son los gastan más :p

Queria ver como son las propinas de hombres vs mujeres cada dia.

df_valores = df.pivot_table(values='total_bill', index=['sex', 'day', 'smoker'], columns=['time'], aggfunc=[np.mean, np.median, np.max])
df_valores

Luego llenar los valores nulos con 0.

df_valores.fillna(0)

Y este fue el resultado

Quería ver cuan importante para el restaurante eran los fumadores,creo que el restaurante tendrá que habilitar un lugar especial para ellos,jajaj


time	Lunch	Dinner
smoker		
Yes	17.399130	21.859429
No	17.050889	20.095660

¿Como saber cuando poner corchetes dobles en las columnas y cuando no? ejem: [[‘total_bill’]]

Acá utilizo la función min y max para saber por hombres y mujeres quien gasta mas y menos por cada día de la semana.

Por otro lado, se sabe el promedio y la media de lo que pagaron hombres y mujeres de acuerdo al día de la semana:

Quise averiguar el conteo de días donde mas asistía cada género: A las mujeres les gusta ir más los Jueves y a los hombres sábado y domingo 😃

Calculando el procentaje de mujeres y hombres que fuman dependiendo del dia y del tiempo(cena y almuerzo)

df.pivot_table(values=['ones'],index=['sex','smoker'], columns=['day','time'],aggfunc=np.sum).apply(lambda x: x/x.sum()*100)

Cuando el habla de promedio realmente habla de media y cuando habla de media hace referencia a la mediana, es así no?.

Tomando en cuenta que la columna size hace referencia al tamaño de la mesa. Se puede concluir que el restaurante gana menos por persona conforme el tamaño de la mesa es mayor.

df['size_total'] = df['total_bill'] / df['size']

df.groupby(['size'])[['size_total']].median()

resultado

Yo hice un análisis para observar si el tip y total_bill se comportan de la misma manera al ver la información en un desglose por día y tiempo, según el sexo. Encontré los hombres registran cuentas más altas los viernes durante la noche, y las mujeres los sábados durante las noches. Y podemos detectar un área de oportunidad los jueves por la noche, en donde el consumo solo es por mujeres. El % de propina se muestra mayor para las mujeres durante la cena, por lo que podríamos concluir, que el restaurante puede incentivar a incrementar el consumo de las mujeres, asegurando un porcentaje más de alto de propinas y de esa manera, la retribución a los empleados incrementará sin necesidad de un aumento de sueldos o de precios al consumidor. 😃 Agradezco feedback!

df.pivot_table(
values = ['total_bill', 'perc_tip'], 
index = ['sex','time'], 
columns = 'day', 
aggfunc= np.median
)
.fillna(0)

¿Quién paga mas propina (% valor de la cuenta), los hombres fumadores o las mujeres fumadoras?


smoker	Yes
sex	
Male	15.277
Female	18.215

hola, a continuación realicé un análisis combinando algunas herramientas como un diccionario de cálculos y la función .fillna():

dict_agg2 = [np.sum, np.max, np.min, np.median, np.mean, np.]

Script de la pivot table:

df_smokers_by_day = df.pivot_table(values='total_bill', index=['smoker', 'sex', 'day'], columns='time', aggfunc=dict_agg2).fillna(0)
df_smokers_by_day 

Interesante comportamiento, que curioso que su desviacion estandar sea tan amplia

Esta ultimas clases no estan los dataset de donde se tomo la informacion, y en el drive que esta en archivos y enlaces no se encuentra…

Es como usar Excel, pawer pivot y pawer query sin las limitantes de Excel

Reto completado,

A mi me interesaba saber en que dia de la semana se generaban mas ganancias, tambien saber quien dejaba mas propina (damas o caballeros) y ver en que dia el total_bill era mas alto, para eso utilice esta linea de codigo:

df.pivot_table(values=["tip", "total_bill"], index="day", columns='sex', aggfunc=np.mean)

Para ver si los fumadores o no fumadores dejan más propina

df.pivot_table(values='prct_tip', index='sex', columns='smoker', aggfunc=[np.mean, np.median])

Me pregunto que sirven en las cenas que los almuerzos no. Me inclino a que en las cenas se consumen mas alcohol y por eso las facturas son mas grandes

df.groupby(['sex', 'time'])[['total_bill', 'prct_tip']].max()
		total_bill	prct_tip
sex	time		
Male	Lunch	41.190	0.266
Dinner	50.810	0.710
Female	Lunch	43.110	0.259
Dinner	44.300	0.417

Tomé las variables ** porcentaje de propinas**, sex, day and smoker para determinar que personas dejaban más propinas y si podía influir el si fumaban o no.

![pivot_table](

Se puede ver que en las mujeres pareciese que influyese el hecho de si fuman o no, pues las que fuman en promedio dejan más propinas, cosa que en los hombres varía por día

Porcentaje de fumadores en cada comida por día de la semana:

Los viernes se fuma más (en proporción)

reset index.

Ejercicio propuesto:

En mi caso me intereso saber cuál es la mediana de propina de acuerdo a el género, si es fumador o no fumador y el monto total gastado por el cliente, esto lo logre mediante la siguiente línea de código:

df.pivot_table(values='tip', index=['sex','smoker'], columns='bin_total', aggfunc=np.median)

El resultado fue el siguiente:

Al parecer los hombres y mujeres que no fuman y consumen entre 35 y 60 USD son los más propensos a dejar mayores propinas.

Si quisiéramos obtener la cantidad de celdas que nos devolverá el pivot, bastaría con multiplicar la cantidad de cada variable categórica y luego multiplicarlas por el número de funciones de agregación.

En este caso tenemos 2 variables en sex y 2 en time, ya ahí serían 4, pero al multiplicarlo por 2 funciones de agregación, terminamos teniendo 8.

¿hay diferencias con hombres y mujeres fumadoras/fumadores por la cantidad de personas por mesas por día?

size: personas por mesa
size_total: total de personas por mesa

df['size_total'] = df['total_bill'] / df['size']

entonces podemos observar al pasar los días las ocupaciones de las mesas:

df_smokers_by_day3 = df.pivot_table(values='total_bill', index=['smoker', 'sex','size_total'], columns=['day'], aggfunc=np.mean).fillna(0)
df_smokers_by_day3

se puede concluir que:

  • los Hombres fumadores gastan más, los jueves en mesas grandes de 5 personas y van gastando menos al llegar el fin de semana ocupan de 4 a 3 personas por mesas.
  • las mujeres no fumadoras gastan más empezando el viernes y terminando el sábado, de 11 a 13 personas por mesas.

Una funcionalidad muy potente para generación de información.

Calculando el porcentaje por “sex” y “smoker” en cada tipo de comida (“Lunch” y “Dinner”):

Definición de la función “prcntj”:

Esto muestra el promedio de propinas que dan los hombres y mujeres no fumadores Vs los fumadores. Además de el promedio que pagan en la cuenta.
.

.
.
Código

df.pivot_table(values= ['total_bill','tip'], index= ['smoker','sex'], columns='day')

Comportamiento de las propinas en función del día de la semana y el tamaño de la orden.

Es coherente que a mayor sea el tamaño de la orden la propina vaya aumente.

df.pivot_table(values='tip', index='size', columns='day', aggfunc=[np.median,np.std])

Reto

df.pivot_table(values='tip', index=['sex','time'], columns=['day'], aggfunc=np.sum).apply(lambda x: np.nan_to_num(x))

Se quiere saber la sum, la median y la std de las propinas y la facturación durante las lunch y dinner, los dias laborables.

se acepta cualquier corrección

Excelente curso

df_pivotds.unstack().reset_index()

![](

df_pivotds = df.pivot_table(values='total_bill', index='sex', columns='smoker', aggfunc=[np.median, np.std])
df_pivotds

![](

df_sd = df.groupby(['sex', 'day'])[['total_bill']].mean().reset_index()
df_sd

![](

muy interesante