Thep Excel

numpy whereเลือกค่าตามเงื่อนไขใน array

numpy.where ผมใช้เลือกค่าจาก array ตามเงื่อนไขที่กำหนดครับ ถ้าให้เทียบง่ายๆ มันคือ IF ใน Excel นั่นแหละ แต่เก่งกว่าตรงที่ทำงานกับข้อมูลทั้ง array พร้อมกันในทีเดียว แถมยังใส่อาร์กิวเมนต์เดียวเพื่อหา index ที่ตรงเงื่อนไขได้อีกด้วย

>_
np.where(condition, x, y)

ความนิยม5/10
ความยาก3/10
ประโยชน์5/10

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าndarray

คืนเป็น NumPy array ใหม่ทันทีครับ ใช้งานต่อได้เลย ไม่ต้อง chain อะไรเพิ่ม

อาร์กิวเมนต์ ชนิด คำอธิบาย
condition array_like เงื่อนไขที่ให้ผลเป็น True หรือ False เช่น arr > 0 หรือ (arr > 0) & (arr < 10)
[x]ไม่บังคับ array_like ค่าที่จะคืนเมื่อเงื่อนไขเป็น True ถ้าไม่ใส่ x และ y ฟังก์ชันจะคืน index แทน
[y]ไม่บังคับ array_like ค่าที่จะคืนเมื่อเงื่อนไขเป็น False

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

numpy.where เป็นฟังก์ชันที่ผมหยิบมาใช้บ่อยมากเวลาทำงานสาย data science 😎

มันใช้ได้สองแบบครับ:
1. แบบใส่สามอาร์กิวเมนต์: np.where(condition, x, y) ถ้าเงื่อนไขจริงคืนค่า x ถ้าเท็จคืนค่า y ไล่เช็คทีละ element ทั้ง array พูดง่ายๆ คือ “จริงเอาอันนี้ เท็จเอาอันนั้น”
2. แบบใส่อาร์กิวเมนต์เดียว: np.where(condition) จะคืน index ของ element ที่เงื่อนไขเป็นจริงมาให้

ที่เจ๋งคือมันทำงานแบบ vectorized ซึ่งเร็วกว่าการเขียน for loop วนทีละตัวมากครับ แล้วถ้าเงื่อนไขมีหลายชั้น ก็ซ้อน np.where เข้าไปข้างในได้ คล้ายๆ nested IF ใน Excel เลย ✨

Examples

ตัวอย่างที่ 1: แทนค่าลบด้วย 0np.where(arr > 0, arr, 0)

ผมให้มันไล่เช็คทุก element ครับ ถ้าตัวไหนมากกว่า 0 ก็เก็บค่าเดิมไว้ ถ้าน้อยกว่าหรือเท่ากับ 0 ให้ใส่ 0 แทน ผลที่ได้คือ array ใหม่ [1, 0, 3, 0, 5] ที่ค่าลบทุกตัวถูกเปลี่ยนเป็น 0 หมดเลย

>_
np.where(arr > 0, arr, 0)

ผลลัพธ์[1 0 3 0 5]
ตัวอย่างที่ 2: หา index ของ element ที่ตรงเงื่อนไขnp.where(arr2 > 7)

พอใส่อาร์กิวเมนต์เดียว np.where จะเปลี่ยนโหมดมาคืน index ตำแหน่งที่เงื่อนไขเป็นจริงให้แทนครับ ในที่นี้ค่าที่มากกว่า 7 คือ 10 (อยู่ index 0), 8 (index 2) และ 12 (index 4) ก็เลยได้ผลเป็น [0, 2, 4]

>_
np.where(arr2 > 7)

ผลลัพธ์(array([0, 2, 4]),)
ตัวอย่างที่ 3: เงื่อนไขหลายชั้นแบบ nested IF สำหรับให้เกรดnp.where(scores >= 80, 'A', np.where(scores >= 70, 'B', 'C'))

อันนี้คือลูกเล่นที่ผมชอบครับ ซ้อน np.where สองชั้นเพื่อให้เกรด ชั้นนอกเช็คว่าคะแนน >= 80 ไหม ถ้าใช่ได้ A เลย ถ้าไม่ใช่ก็ส่งต่อให้ชั้นในเช็คอีกทีว่า >= 70 ไหม ใช่ได้ B ไม่ใช่ได้ C ผลออกมาคือ [C, B, C, A, C] ตรงตามคะแนนทุกตัว

>_
np.where(scores >= 80, 'A', np.where(scores >= 70, 'B', 'C'))

ผลลัพธ์['C' 'B' 'C' 'A' 'C']

FAQs

ต่างจาก boolean indexing ยังไง?+

ต่างกันที่ขนาดผลลัพธ์ครับ boolean indexing อย่าง arr[arr > 0] จะกรองเอาเฉพาะค่าที่ตรงเงื่อนไขออกมา ขนาด array เลยเปลี่ยน (สั้นลง) แต่ np.where(cond, x, y) คืน array ขนาดเท่าเดิมเสมอ แค่แทนค่าแต่ละตัวด้วย x หรือ y ตามเงื่อนไข ผมเลยเลือก np.where เวลาอยากรักษาตำแหน่งข้อมูลให้เท่าเดิมครับ

ใช้กับ pandas DataFrame ได้ไหม?+

ได้ครับ จริงๆ pandas มีเมธอด .where() และ .mask() ในตัวที่ทำงานคล้ายกันอยู่แล้ว แต่ถ้าอยากใช้ np.where กับ Series ก็จัดได้เลย ผลที่ได้จะเป็น ndarray ซึ่งเอามาแปลงกลับเป็น Series ต่อได้ไม่มีปัญหา

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy where จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้numpy whereLogic
Aggregation (3)
numpy max

np.max ใน NumPy ผมใช้หาค่ามากที่สุดใน array หรือตามแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนกับฟังก์ชัน MAX ใน Excel เลยครับ แต่รองรับข้อมูลหลายมิติได้ด้วยครับ

numpy mean

np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ

pandas groupby

groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ

Logic (2)
numpy argmax

np.argmax ผมใช้หา index หรือตำแหน่งของค่าที่มากที่สุดใน array ครับ ย้ำว่ามันคืน "ตำแหน่ง" ไม่ใช่ "ตัวค่า" ถ้าใครเคยใช้ Excel มาก่อน ตัวนี้คือ MATCH(MAX(range), range, 0) นั่นเองครับ

pandas between

between ใน pandas ผมใช้เช็คว่าค่าในคอลัมน์อยู่ในช่วง [left, right] หรือเปล่า คืนออกมาเป็น Series ของ True/False (เรียกว่า boolean mask) เอาไปกรองแถวต่อได้เลย ถ้าใครเคยเขียนเงื่อนไขใน Excel แบบ ยอด >= 100 AND <= 500 ตัวนี้คือคำสั่งสั้นๆ ที่ทำแบบนั้นให้ในบรรทัดเดียวครับ

Transform (2)
numpy reshape

arr.reshape ใน NumPy ผมใช้สำหรับเปลี่ยนรูปร่าง (shape) ของ array โดยจำนวนสมาชิกทั้งหมดยังคงเดิม เช่น แปลง 1D array 12 ตัวให้กลายเป็น matrix 3×4 ได้ทันที โดยไม่ต้องสร้างข้อมูลใหม่ครับ

numpy unique

np.unique ใช้หาค่าที่ไม่ซ้ำกันใน array แล้วเรียงจากน้อยไปมากให้อัตโนมัติ คล้ายกับฟังก์ชัน UNIQUE ใน Excel 365 มากครับ ยังนับความถี่แต่ละค่าได้ด้วยถ้าใส่ return_counts=True

Selection (2)
pandas isin

isin ใน pandas ผมใช้เช็คว่าแต่ละค่าในคอลัมน์ตรงกับค่าใน list ที่กำหนดไหม คืนมาเป็น True/False ทีละแถว ถ้าใครเคย filter หลายค่าพร้อมกันใน Excel หรือเขียน OR หลายเงื่อนไขซ้อนๆ กัน ตัวนี้คือทางลัดที่สะอาดกว่ามากครับ

pandas query

query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน boolean mask ยาวๆ ให้ตาลาย เหมาะมากกับเงื่อนไขซับซ้อนหลายข้อที่อยากให้โค้ดสั้นและอ่านรู้เรื่องครับ

Creation (1)
numpy arange

np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่