La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
Cuenta los pedidos por día (todos los estados, cada día del calendario). Asigna a result un DataFrame con las columnas order_date (el día), n_orders (pedidos de ese día) y avg_7d (media de n_orders sobre ese día y los 6 días anteriores, redondeada a 2), solo para los días 2025-11-01 a 2025-12-31 (61 filas), ordenado por order_date ascendente, con el índice reiniciado. Las primeras filas de noviembre deben usar los días de octubre anteriores, no NaN.
- Usa el DataFrame
orderspendiente - Muestra exactamente
order_daten_ordersavg_7dpendiente - 61 filas, ordenadas como se pidependiente
Tu código
Cargando el editor…
Solución de referencia
| order_id | customer_id | order_date | status | channel |
|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Jordan, y por qué
DataFrames
Cargados como DataFrames de pandas, junto con pd y np.
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NaN |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NaN |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NaN |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NaN |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NaN |
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NaN | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NaN | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NaN | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NaN | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NaN | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NaN | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
Por qué suavizar una serie diaria
Las cifras diarias son ruidosas. Los pedidos de Harbor & Pine oscilan con el día de la semana, con los días de cobro y con las promociones, así que un gráfico diario parece un sismógrafo. Una media móvil (también llamada media deslizante) reemplaza cada día por la media de una ventana de días que termina en él. Una ventana de 7 días cubre cada día de la semana exactamente una vez, así que el ritmo semanal se cancela y aparece la tendencia.
rolling(n)
rolling(7) desliza una ventana de 7 filas a lo largo de la serie; la agregación que sigue se
ejecuta en cada ventana:
daily = orders.set_index("order_date").resample("D").size()
daily.head(8).tolist()
# [1, 8, 6, 4, 10, 9, 5, 8]
daily.rolling(7).mean().round(2).head(8).tolist()
# [nan, nan, nan, nan, nan, nan, 6.14, 7.14]
El 7.º valor, 6.14, es la media de los primeros siete días (43 pedidos / 7). Los seis primeros
valores son NaN porque todavía no existe una ventana completa de 7 filas. Si prefieres obtener un
valor desde el primer día, pasa min_periods: rolling(7, min_periods=1) promedia las filas que
haya disponibles, así que los tres primeros valores pasan a ser 1.0, 4.5 y 5.0. Es cómodo pero
engañoso al principio de un gráfico, por eso el valor por defecto es estricto.
.sum(), .max(), .median() y .std() también funcionan después de rolling. Una suma
móvil de 7 días son “los pedidos de la última semana”, otra cifra habitual de panel.
La ventana cuenta filas, no días. Por eso la serie diaria sale de resample("D"): tiene exactamente
una fila por día del calendario, ceros incluidos, así que 7 filas son realmente 7 días. En una serie
con días ausentes usarías una ventana basada en tiempo como rolling("7D").
Primero la ventana, después el filtro
Jordan solo quiere noviembre y diciembre. Si filtras primero, la ventana no tiene nada hacia atrás:
daily.loc["2025-11-01":].rolling(7).mean().head(7) # six NaN, then 17.71
Calcula la media móvil sobre todo el historial y recorta el rango de fechas al final del todo. Entonces el 1 de noviembre de 2025 promedia del 26 de octubre al 1 de noviembre: 14.29.
Cómo es la temporada de fiestas
En el Black Friday, el 28 de noviembre de 2025, los pedidos saltan de 24 a 56. El recuento diario se dispara durante cuatro días (56, 51, 58, 67) y vuelve a 24 el 2 de diciembre, pero la media de 7 días sigue subiendo unos días más, porque el pico sigue dentro de la ventana. Alcanza su máximo de 44.14 el 4 de diciembre, el último día cuya semana aún contiene todo el fin de semana de Black Friday y el Cyber Monday. Una media móvil siempre va con retraso: te dice el nivel de la última semana, no el de hoy.
Errores comunes
- Filtrar el rango de fechas antes de aplicar rolling, lo que deja NaN al inicio del periodo.
- Aplicar rolling sobre pedidos en bruto en lugar de una serie diaria: la ventana son 7 pedidos, no 7 días.
- Usar
min_periods=1sin decirlo, lo que hace que los primeros días parezcan más tranquilos de lo que fueron. - Leer el máximo de una media móvil como el día pico. Va con retraso respecto al pico real.
¡Linterna encendida!
Practicaste: rollingmoving averageresample dailywindowmin periods
- Resuelto
- Sin pistas
- Al primer intento
