Thep Excel

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

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

np.where(condition, x, y)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

np.where(condition, x, y)

คืนค่า (Returns)
ndarray

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

Argument Type Required Default Description
condition array_like Yes เงื่อนไขที่ให้ผลเป็น True หรือ False เช่น arr > 0 หรือ (arr > 0) & (arr < 10)
x array_like Optional ค่าที่จะคืนเมื่อเงื่อนไขเป็น True ถ้าไม่ใส่ x และ y ฟังก์ชันจะคืน index แทน
y array_like Optional ค่าที่จะคืนเมื่อเงื่อนไขเป็น False

Examples

ตัวอย่างที่ 1: แทนค่าลบด้วย 0
np.where(arr > 0, arr, 0)
ผมให้มันไล่เช็คทุก element ครับ ถ้าตัวไหนมากกว่า 0 ก็เก็บค่าเดิมไว้ ถ้าน้อยกว่าหรือเท่ากับ 0 ให้ใส่ 0 แทน ผลที่ได้คือ array ใหม่ [1, 0, 3, 0, 5] ที่ค่าลบทุกตัวถูกเปลี่ยนเป็น 0 หมดเลย
Python Code:

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

Result:

[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]
Python Code:

np.where(arr2 > 7)

Result:

(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] ตรงตามคะแนนทุกตัว
Python Code:

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

Result:

['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

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 เลย ✨

Leave a Reply

Your email address will not be published. Required fields are marked *