La solicitud

De Jordan Reyes, Director de Marketing
Tu objetivo
Usando los pedidos hechos en 2025 (todos los estados), asigna a result un DataFrame con las columnas weekday (el nombre del día en inglés, p. ej. 'Monday') y n_orders, una fila por día, ordenado de lunes a domingo, con el índice reiniciado.
- Usa el DataFrame
orderspendiente - Muestra exactamente
weekdayn_orderspendiente - 7 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
Las fechas no son texto
Una fecha guardada como texto, '2025-03-14 19:02:11', no puede decirte su día de la semana, no se
puede comparar con seguridad y solo se ordena bien por suerte del formato. Conviértela a un datetime real:
pd.to_datetime(orders["order_date"])
En este juego las columnas de fecha se interpretaron al cargar las tablas, así que order_date ya
tiene dtype datetime64[ns], y pd.to_datetime simplemente la devuelve sin cambios. En el trabajo,
un pd.read_csv normal te da texto, así que convertir suele ser la primera línea de cualquier
trabajo con fechas. Puedes hacerlo al cargar con pd.read_csv(path, parse_dates=["order_date"]).
Cuando algunos valores están mal formados, errors="coerce" los convierte en NaT en lugar de
fallar, y una cadena format= hace el análisis estricto y rápido:
pd.to_datetime(raw_dates, format="%Y-%m-%d", errors="coerce")
Luego cuenta los valores NaT para ver cuántas fechas no se interpretaron. Forzar en silencio y
seguir adelante oculta problemas de datos.
El accesor .dt
Las columnas datetime tienen un accesor .dt, como .str para el texto:
d = orders["order_date"]
d.dt.year # 2025
d.dt.month # 3
d.dt.day_name() # 'Friday'
d.dt.dayofweek # 0 = Monday ... 6 = Sunday
d.dt.hour # 19
d.dt.date # the date part only
d.dt.to_period("M") # 2025-03, a monthly period
d.dt.strftime("%Y-%m") # '2025-03' as text
Filtrar por fecha funciona con comparaciones y between, y pandas acepta cadenas de fecha al otro lado:
orders[orders["order_date"] >= "2025-01-01"]
orders[orders["order_date"].dt.year == 2025]
Ordenar los días en orden de calendario
Los nombres de los días se ordenan alfabéticamente (Friday, Monday, Saturday…), lo que nadie quiere en un gráfico. Agrupa también por el número del día y ordena por él:
(
in_2025.assign(day_num=d.dt.dayofweek, weekday=d.dt.day_name())
.groupby(["day_num", "weekday"], as_index=False)
.agg(n_orders=("order_id", "count"))
.sort_values("day_num")[["weekday", "n_orders"]]
)
Una alternativa es una categórica ordenada:
pd.Categorical(names, categories=["Monday", ..., "Sunday"], ordered=True), que también ordena
correctamente en los gráficos.
Otros arreglos de tipo
Las fechas son el problema de tipo más común, pero no el único:
pd.to_numeric(raw_prices, errors="coerce") # text to numbers, bad values to NaN
web_sessions["customer_id"].astype("Int64") # float IDs back to integers, keeping missing
products["is_active"].astype(int) # True/False to 1/0
Int64 (con I mayúscula) es el tipo entero con valores nulos de pandas. astype(int) normal falla
en una columna con valores ausentes, por eso web_sessions.customer_id se carga como float desde el principio.
Leer el resultado
Los días de fin de semana salen por delante en Harbor & Pine, lo que encaja con una tienda de artículos para el hogar: la gente mira muebles y decoración cuando tiene tiempo. Antes de actuar, comprueba si el patrón se mantiene también en 2023 y 2024, y si lo impulsan unos pocos fines de semana de grandes rebajas como el Black Friday. Un año de recuentos por día de la semana es una pista, no una ley.
Errores comunes
- Ordenar por el nombre del día y obtener el viernes primero.
- Comparar fechas guardadas como texto con fechas como datetimes.
- Usar
errors="coerce"y no contar nunca cuántos valores se convirtieron enNaT.
¡Linterna encendida!
Practicaste: to datetimedt accessordayofweekday nameastypeto numeric
- Resuelto
- Sin pistas
- Al primer intento
