ยุบ Field รวมกัน โดยเลือกค่าที่ไม่ใช่ Null หรือ NaN ใน Pandas

วันนี้ไปเจอเทคนิคในการยุบ field รวมกัน ให้เหลือ field เดียวครับ จาก 2 fields ที่มีค่าบ้างไม่มีบ้าง เช่น

import numpy as np


df = pd.DataFrame({
    "foodstuff": ["apple-martini", "apple-pie", np.nan, np.nan, np.nan],
    "type": [np.nan, np.nan, "strawberry-tart", "dessert", np.nan]
})

Screen Shot 2564-12-08 at 13.17.35

เราสามารถสั่งบรรทัดเดียวเลยได้ตามนี้

df.rename(columns={"type": "foodstuff"}).stack().unstack()

Screen Shot 2564-12-08 at 13.19.02

โค้ดด้านบนทำอะไร?

สิ่งที่โค้ดด้านบนทำก็คือ rename ชื่อ field type ก่อนให้เป็น foodstuff เสร็จแล้วก็สั่ง stack เพื่อดึงเอา column ให้มาเป็นแถว และจากแถวให้ไปเป็น column ซึ่งตรงนี้จะเสมือนกับว่าเราได้กำจัดแถวที่มันเป็น Null หรือ NaN ทิ้งออกไปแล้ว

ถ้าเราลองสั่งแค่ stack จะได้ผลตามนี้

df.rename(columns={"type": "foodstuff"}).stack().

Screen Shot 2564-12-08 at 13.24.50

ซึ่งพอเราสั่ง unstack มันก็จะดึงแถวกลับไปเป็น column เสมือนกับว่าเรายุบ 2 fields นี้เข้าไปด้วยกัน

เอาเทคนิคนี้มาจาก

งดงามมากครับ :star_struck: