La solicitud

De Angela Rivera, Directora de Atención al Cliente
Tu objetivo
Haz que web sea una copia (con .copy()) de los pedidos cuyo canal es 'web', y añade una columna free_shipping que sea True donde shipping_fee es 0. Asigna a result el valor de web.sample(n=10, random_state=7) con solo las columnas order_id, status, shipping_fee, free_shipping, en el orden en que sample() devuelve las filas (no ordenes, no reinicies el índice).
- Usa el DataFrame
orderspendiente - Muestra exactamente
order_idstatusshipping_feefree_shippingpendiente - 10 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 Angela, 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
El resultado de un filtro no siempre es una tabla independiente
Cuando filtras, pandas puede entregarte algo que sigue vinculado al DataFrame original. Si luego añades o
cambias una columna en él, pandas no puede estar seguro de si querías cambiar también orders, y te
avisa:
web = orders[orders["channel"] == "web"]
web["free_shipping"] = web["shipping_fee"] == 0
# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
El aviso es pandas diciendo «esto podría no hacer lo que piensas». Aquí la columna queda solo en web,
pero un código muy parecido, como orders[orders["channel"] == "web"]["shipping_fee"] = 0, no cambia
nada en silencio. La respuesta limpia es decir lo que quieres: una tabla separada propia.
web = orders[orders["channel"] == "web"].copy()
web["free_shipping"] = web["shipping_fee"] == 0 # no warning, orders is untouched
La asignación simple, web2 = web, tampoco copia nada. Le da a la misma tabla un segundo nombre, así que
un cambio a través de un nombre se ve a través del otro. Usa .copy() siempre que pienses modificar una
tabla filtrada o prestada.
Filas aleatorias que puedes reproducir
sample elige filas al azar. n dice cuántas; frac=0.1 tomaría el 10% en su lugar.
web.sample(n=10) # a different ten every run
web.sample(n=10, random_state=7) # the same ten every run
random_state es una semilla: sirve cualquier número entero, y el mismo número sobre la misma tabla
siempre elige las mismas filas. Eso importa para el equipo de Angela. Si alguien pregunta «¿por qué
llamaron a estos clientes?», puedes volver a ejecutar el código y obtener la lista idéntica. Con
random_state=7, las primeras elegidas son los pedidos 2453, 12392 y 8576.
sample devuelve las filas en el orden aleatorio en que las sacó, con sus etiquetas de índice
originales. Para una lista de llamadas eso está bien, así que deja el orden como está aquí.
Leer la muestra
Ocho de los diez pedidos de la muestra se enviaron gratis. Entre los 5,913 pedidos web la proporción es de alrededor del 79%, así que la muestra parece típica. Una muestra pequeña puede parecer inusual por puro azar, lo cual conviene saber antes de que nadie lea demasiado en diez filas.
Errores comunes
- Saltarse
.copy()y recibir unSettingWithCopyWarningal añadir la columna. - Pensar que
web2 = webhace una copia. No lo hace; ambos nombres apuntan a la misma tabla. - Dejar fuera
random_state, de modo que la lista cambia cada vez que la ejecutas. - Muestrear
ordersprimero y filtrar después, lo que da menos de diez pedidos web. - Ordenar o reiniciar la muestra cuando la tarea la pide tal como se extrajo.
¡Linterna encendida!
Practicaste: copysamplerandom stateboolean masknew column
- Resuelto
- Sin pistas
- Al primer intento
