AI & Data Dreamers練功房
寶箱片場規則
DATA GATES・資料處理關卡・高階・4 題

Pandas 高階・排名、向量化與資料管線

這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。

  1. 01

    區域業績排名

    困難視窗函數 rank

    業務表 reps 有 region、rep、sales。請在每個區域內依 sales 由高到低排名,同分同名次、下一名不跳號(等同 SQL 的 DENSE_RANK)。

    只保留各區名次 ≤ 2 的人。result 四欄:region、rep、sales、rnk(整數),

    排序:region 依「北區、中區、南區」順序,同區內依 rnk、再依 rep 由小到大。

    作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.3)。

    作答登入後可作答
  2. 02

    髒資料清理後串接

    困難多表清理串接

    raw_orders 是從舊系統匯出的訂單,資料很髒:

    • customer 大小寫不一、前後有空白(例如 " c01")。
    • amount 是字串,有千分位逗號,缺值寫成 "-"。
    • status 大小寫不一、前後有空白。

    請依序處理:

    1. customer 去空白並轉大寫;status 去空白並轉小寫。
    2. amount 去掉逗號轉成數字,"-" 視為缺值,缺值的列刪除。
    3. 只留 status 為 paid 的列。
    4. 用 inner join 接上客戶表 customers(客戶表沒有的代碼就丟掉)。
    5. 依 city 算營收。

    result 三欄:city、n(筆數)、revenue(整數),依 revenue 由大到小。

    作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.3)。

    作答登入後可作答
  3. 03

    二十萬筆的向量化寫法

    困難效能寫法(向量化)

    orders 有 20 萬筆(用固定亂數種子產生,每次執行都一樣)。要依規則算出每筆的回饋點數 points:

    • gold:回饋 5%
    • silver:回饋 3%
    • normal:amount 大於等於 3000 才回饋 1%,否則 0%
    • 點數=amount × 回饋百分比 // 100(整數運算,無條件捨去;不要用 0.05 這類小數相乘,浮點誤差會差 1 點)

    用 apply(axis=1) 逐列算在 20 萬筆上會很慢(瀏覽器內可能要數十秒)。請用向量化寫法(numpy 的 np.select 或 np.where)算出 points 欄,

    再印出每種會員的總點數 summary(Series,索引為 member,依 member 字母排序)與全體總點數。

    作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.3)。

    作答登入後可作答
  4. 04

    快照去重管線

    困難資料管線

    爬蟲每天會對同一支股票抓好幾次快照,存在 snapshots(stock_id、date、close、fetched_at)。close 是字串,偶爾抓到壞值(例如 "bad")。

    請寫三個函式,再用 .pipe() 串成管線:

    1. parse(df):close 轉成數字(壞值變 NaN 後刪掉)、fetched_at 轉成時間。
    2. latest(df):同一 (stock_id, date) 只保留 fetched_at 最新的那筆。
    3. report(df):依 stock_id、date 由小到大排序,只留 stock_id、date、close 三欄。

    result = snapshots.pipe(parse).pipe(latest).pipe(report)

    作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.3)。

    作答登入後可作答