Pandas 高階・排名、向量化與資料管線
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 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)。
作答登入後可作答 - 02
髒資料清理後串接
困難多表清理串接raw_orders 是從舊系統匯出的訂單,資料很髒:
- customer 大小寫不一、前後有空白(例如 " c01")。
- amount 是字串,有千分位逗號,缺值寫成 "-"。
- status 大小寫不一、前後有空白。
請依序處理:
- customer 去空白並轉大寫;status 去空白並轉小寫。
- amount 去掉逗號轉成數字,"-" 視為缺值,缺值的列刪除。
- 只留 status 為 paid 的列。
- 用 inner join 接上客戶表 customers(客戶表沒有的代碼就丟掉)。
- 依 city 算營收。
result 三欄:city、n(筆數)、revenue(整數),依 revenue 由大到小。
作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.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)。
作答登入後可作答 - 04
快照去重管線
困難資料管線爬蟲每天會對同一支股票抓好幾次快照,存在 snapshots(stock_id、date、close、fetched_at)。close 是字串,偶爾抓到壞值(例如 "bad")。
請寫三個函式,再用 .pipe() 串成管線:
- parse(df):close 轉成數字(壞值變 NaN 後刪掉)、fetched_at 轉成時間。
- latest(df):同一 (stock_id, date) 只保留 fetched_at 最新的那筆。
- report(df):依 stock_id、date 由小到大排序,只留 stock_id、date、close 三欄。
result = snapshots.pipe(parse).pipe(latest).pipe(report)
作答方式:資料已在程式裡建好。只改「TODO」那一段,最後的 print 保留不動,輸出才能自動對答案。本題在瀏覽器內以 Pyodide 執行(pandas 2.3)。
作答登入後可作答

送件鴿飛出去了