La solicitud

De Robert Kim, Director de Operaciones
Tu objetivo
Los datos llegan hasta 2025-12-31, pero responde como si hoy fuera 2025-10-15. daily (en el starter) contiene las ventas netas por día de los pedidos confirmados. Asigna a result un dict con "october_to_date" (de 2025-10-01 a 2025-10-15), "september" (todo septiembre de 2025), "trailing_28" (de 2025-09-18 a 2025-10-15), "prior_28" (de 2025-08-21 a 2025-09-17), todos inclusivos y redondeados a 2, y "change_pct": (trailing_28 / prior_28 − 1) × 100, redondeado a 1.
- Usa el DataFrame
orderspendiente - Usa el DataFrame
order_itemspendiente - Guarda un dict en
resultpendiente
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 Robert, 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 |
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 |
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 |
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
La trampa del período parcial
Un mes calendario es una buena ventana cuando ya terminó. Mientras corre, “este mes” tiene menos días que “el mes pasado”, así que siempre es menor. El 15 de octubre el panel comparó 15 días de octubre con 30 días de septiembre y mostró una caída del 39 %:
daily.loc["2025-10-01":"2025-10-15"].sum() # 89,128.58
daily.loc["2025-09-01":"2025-09-30"].sum() # 145,543.20
Al negocio no le pasó nada. La mitad del mes todavía no había ocurrido.
Ventanas móviles
Una ventana móvil (trailing) siempre cubre el mismo número de días, terminando hoy. Compara los últimos 28 días con los 28 anteriores y ambos lados están completos:
2025-09-18 → 2025-10-15 154,204.39
2025-08-21 → 2025-09-17 141,267.38 change +9.2%
La tendencia que Robert debería ver es al alza, no a la baja. Una ventana móvil además se actualiza cada día, así que responde a “¿cómo vamos ahora mismo?” sin esperar al cierre del mes.
Por qué 28 y no 30
Las ventas difieren según el día de la semana. En 2025 Harbor & Pine promedió unos $7.500 de ventas netas los sábados y unos $5.900 los miércoles. Una ventana de 30 días contiene cuatro o cinco de cada día de la semana según dónde empiece, así que dos ventanas de 30 días pueden diferir solo porque una tiene un sábado de más. Las ventanas de 7 o 28 días siempre contienen el mismo número de cada día de la semana. Por el mismo razonamiento, los KPI semanales comparan semanas completas, de lunes a domingo.
Proyección de ritmo
Otra solución es la proyección de ritmo (run rate): el mes en curso dividido entre los días transcurridos, por los días del mes. Para octubre, $89.128,58 / 15 × 31 = $184.199, y octubre terminó en $184.242. Las proyecciones de ritmo funcionan en meses estables y fallan estrepitosamente en los cambios de temporada: una proyección tomada el 15 de noviembre se pierde por completo el Black Friday y el Cyber Monday.
Errores comunes
- Mes en curso frente a un mes completo. Compáralo con los mismos días del mes pasado, o usa una ventana móvil.
- Ventanas que no son múltiplo de 7. La mezcla de días de la semana se cuela en la comparación.
- Llamar “octubre” a un mes parcial en un gráfico. Márcalo como incompleto, o déjalo fuera hasta que cierre.
¡Linterna encendida!
Practicaste: time windowmonth to datetrailing windowpartial periodkpi definition
- Resuelto
- Sin pistas
- Al primer intento
