Thep Excel

numpy uniqueหาค่าที่ไม่ซ้ำใน array แบบเดียวกับ UNIQUE ของ Excel

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

>_
np.unique(ar, return_index, return_inverse, return_counts)

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าndarray

ถ้าเรียกแบบพื้นฐาน np.unique(arr) คืน ndarray ของค่า unique เรียงแล้วครับ แต่ถ้าใส่ return_counts=True หรือ return_index=True จะคืน tuple แทน — ต้อง unpack ก่อนใช้งาน เช่น unique_vals, counts = np.unique(arr, return_counts=True)

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
ar array_like array input ที่ต้องการหาค่า unique — ถ้าไม่ใช่ ndarray จะ flatten ให้อัตโนมัติก่อนประมวลผล
[return_index]ไม่บังคับ bool False ถ้า True จะคืน tuple เพิ่ม array ของ index ตำแหน่งที่เจอค่า unique แต่ละตัวครั้งแรกใน ar
[return_inverse]ไม่บังคับ bool False ถ้า True จะคืน tuple เพิ่ม array ที่ map ตำแหน่งใน ar กลับไปยัง index ใน unique array ใช้สร้าง ar คืนจาก unique ได้
[return_counts]ไม่บังคับ bool False ถ้า True จะคืน tuple เพิ่ม array นับว่าค่า unique แต่ละตัวปรากฏกี่ครั้งใน ar — เหมือน COUNTIF ของ Excel

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

Additional Notes

np.unique คือฟังก์ชันที่ผมเปรียบเทียบกับ UNIQUE ของ Excel 365 ได้เลยครับ — ใส่ array เข้าไป ได้ค่าที่ไม่ซ้ำกลับมาพร้อมเรียงแล้ว

ฟังก์ชันนี้รับ array อะไรก็ได้ (ตัวเลข, string, หลาย dimension) แล้วคืน ndarray ที่มีแต่ค่า unique เรียงจากน้อยไปมาก (สำหรับตัวเลข) หรือ A–Z (สำหรับ string) โดยอัตโนมัติ ไม่ต้อง sort เพิ่มเองครับ

ที่เจ๋งคือมี parameter เสริมสามตัวที่ผมใช้บ่อยมาก — return_counts=True นับความถี่แต่ละค่าให้เลย (เหมือน COUNTIF ใน Excel), return_index=True บอกว่าค่า unique แต่ละตัวเจอครั้งแรกที่ index ไหน, และ return_inverse=True ให้ mapping กลับว่าตัวเดิม index ไหนคือ unique ตัวที่เท่าไหร่ ✨

ส่วนตัวผมใช้ np.unique บ่อยมากตอนทำ data cleaning เช่นดูว่ามี category อะไรบ้างในคอลัมน์ก่อนจะ process ต่อ หรือนับความถี่ด่วนๆ โดยไม่ต้อง import pandas ครับ แต่ถ้าต้องการผลแบบ DataFrame พร้อม sort ตามความถี่ด้วย ผมจะหยิบ .value_counts() ของ pandas แทน

Examples

ตัวอย่างที่ 1: หาค่าที่ไม่ซ้ำจาก array ตัวเลข (แบบ UNIQUE ใน Excel)np.unique(arr)

ผมส่ง array ที่มีค่าซ้ำกันหลายตัวเข้าไป ได้ค่า unique กลับมาเรียงจากน้อยไปมากเลยครับ เหมือนพิมพ์ =UNIQUE(A1:A11) ใน Excel 365 — ค่า 1, 3, 5 ที่ซ้ำกันจะเหลือแค่ตัวเดียว และ array ถูกเรียงให้อัตโนมัติ

>_
np.unique(arr)

ผลลัพธ์[1 2 3 4 5 6 9]
ตัวอย่างที่ 2: หาค่า unique พร้อมนับความถี่ (เหมือน UNIQUE + COUNTIF รวมกัน)counts

เมื่อใส่ return_counts=True ฟังก์ชันจะคืน tuple สองตัว ผม unpack เป็น unique_vals กับ counts ครับ counts ที่ได้คือจำนวนครั้งที่ค่า unique แต่ละตัวปรากฏ เช่น 5 ปรากฏ 3 ครั้ง ใช้ทำ frequency table แทน COUNTIF ใน Excel ได้เลย

>_
counts

ผลลัพธ์[2 1 2 1 3 1 1]
ตัวอย่างที่ 3: หาค่า unique จาก array ข้อความ (ชื่อประเภทสินค้า)np.unique(categories)

np.unique ใช้กับ string ได้ด้วยครับ ผมส่งชื่อประเภทสินค้าที่ซ้ำๆ เข้าไป ได้ชื่อไม่ซ้ำเรียง A–Z กลับมา ใช้ดูว่าข้อมูล category มีค่าอะไรบ้างก่อน process ต่อ — ขั้นตอน data exploration ที่ผมทำเป็นประจำครับ

>_
np.unique(categories)

ผลลัพธ์['ปลา' 'หมู' 'ไก่']
ตัวอย่างที่ 4: ดูจำนวนค่า unique (ใช้ len เพื่อนับ)len(np.unique(scores))

ผมครอบด้วย len() เพื่อนับว่ามีคะแนนกี่ระดับที่แตกต่างกัน ใช้บ่อยตอนอยากรู้ cardinality ของคอลัมน์ก่อนวางแผน visualization ครับ แบบเดียวกับ COUNTA(UNIQUE(range)) ใน Excel

>_
len(np.unique(scores))

ผลลัพธ์5

FAQs

np.unique กับ UNIQUE ใน Excel 365 ต่างกันยังไง?+

คล้ายกันมากครับ แต่ต่างกันสองเรื่อง — อย่างแรก np.unique เรียง array ให้อัตโนมัติ แต่ UNIQUE ของ Excel รักษาลำดับของค่าที่ปรากฏครั้งแรก อย่างที่สอง np.unique เอาไว้กับ array 1D เป็นหลัก ถ้าต้องการรักษาลำดับแบบ Excel ผมจะใช้ dict.fromkeys() หรือ pandas .unique() แทนครับ

เมื่อใส่ return_counts=True แล้วใช้ผลลัพธ์ยังไง?+

ต้อง unpack tuple ออกมาก่อนครับ เขียนว่า unique_vals, counts = np.unique(arr, return_counts=True) แล้วใช้งานแยกกัน unique_vals[i] คือค่า unique ตัวที่ i และ counts[i] คือจำนวนครั้งที่ค่านั้นปรากฏ ถ้าลืม unpack แล้วเรียก np.unique(arr, return_counts=True)[1] ตรงๆ ก็ได้เหมือนกันครับ

np.unique ใช้กับ 2D array ได้ไหม?+

ได้ครับ แต่มีเรื่องต้องระวัง — โดย default จะ flatten array ก่อนแล้วหาค่า unique ของทุก element รวมกัน ถ้าต้องการหา unique แบบรายแถวให้ใส่ axis=0 เช่น np.unique(arr_2d, axis=0) จะคืนแถวที่ไม่ซ้ำกัน ซึ่งใช้ได้ดีกับ structured data ครับ

Resources & Related

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

ฟังก์ชันนี้numpy uniqueTransform
Creation (1)
numpy array

np.array คือประตูหน้าบ้านของ NumPy ครับ ผมใช้มันแปลง Python list หรือ nested list ให้กลายเป็น ndarray ที่ทำ vectorized operations ได้ทันที โดยไม่ต้องวน loop เองเลยแม้แต่บรรทัดเดียว

Transform (1)
numpy sort

np.sort ผมใช้เรียงค่าใน array ของ numpy จากน้อยไปมาก แล้วคืน array ใหม่ที่เรียงแล้วออกมา (ของเดิมไม่ถูกแตะต้อง) ถ้าใครคุ้นกับ SORT หรือเมนู Data > Sort ใน Excel บอกเลยว่าตัวนี้คือสายเดียวกันเลยครับ

Logic (1)
numpy where

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

Aggregation (1)
pandas value_counts

Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน้อยอัตโนมัติ ใช้ดูการกระจายของข้อมูลหรือหาค่าที่พบบ่อยสุดได้เร็วมากครับ

Comments

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