Skip to content

3.4 Boolean & Filter Logic

คุณ filter “นักเรียนที่ active” — ได้ 80 คน จากทั้งหมด 100 คน แปลว่ามี 20 คนที่ไม่ active ใช่ไหม? ไม่จำเป็น — อาจมีบางคนที่สถานะเป็น “ไม่ทราบ”

ในโลกสมบูรณ์แบบ boolean มี 2 ค่า: TRUE กับ FALSE แต่ในโลกจริงมี ค่าที่ 3: ไม่ทราบ (unknown / NULL / NaN / empty cell)

นี่คือ Kleene logic (three-valued logic):

ABA AND BA OR B
TRUETRUETRUETRUE
TRUEFALSEFALSETRUE
TRUENULLNULLTRUE
FALSENULLFALSENULL
NULLNULLNULLNULL
TRUE FALSE NULL 100 rows active = TRUE? 80 rows ✅ 15 rows ❌ 5 rows 🤷 — ถูกตัดออก!

filter ด้วย active = TRUE ได้ 80 rows — แต่ “ไม่ active” จริงๆ แค่ 15 คน ที่เหลือ 5 คน ไม่ทราบสถานะ — หายไปเงียบๆ

สร้างข้อมูลในเซลล์ A1:B6:

nameactive
AliceTRUE
BobFALSE
CarolTRUE
Dave
EveTRUE

ลองใช้ FILTER:

=FILTER(A2:A6, B2:B6=TRUE) → Alice, Carol, Eve (3 คน)
=FILTER(A2:A6, B2:B6=FALSE) → Bob (1 คน)

3 + 1 = 4 — แต่มี 5 คน! Dave หายไปไหน?

=COUNTBLANK(B2:B6) → 1 (Dave!)
=COUNTIF(B2:B6, TRUE) + COUNTIF(B2:B6, FALSE) + COUNTBLANK(B2:B6)
→ 5 (ครบ!)

ต้องนับ blank แยกเสมอ ถ้าอยากได้ภาพเต็ม

กฎ 3 ข้อสำหรับ Boolean + NULL

Section titled “กฎ 3 ข้อสำหรับ Boolean + NULL”
  1. นับเสมอ: ก่อน filter ให้นับ missing ก่อน — COUNTBLANK, .isna().sum(), COUNT(*) WHERE x IS NULL
  2. ตัดสินใจ: missing ควรถือเป็น TRUE หรือ FALSE? ใช้ COALESCE / fillna ตัดสินใจให้ชัด
  3. ตรวจสอบ: filter TRUE + filter FALSE + filter NULL ต้องเท่ากับ total rows เสมอ