Thep Excel

pandas value_countsนับความถี่ของแต่ละค่าใน Series

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

>_
s.value_counts()

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

อัปเดต 31 May 2026

Syntax & Arguments

คืนค่าSeries

คืนเป็น Series ที่มี index เป็นค่าที่พบและ values เป็นจำนวนครั้ง (หรือสัดส่วนถ้าใช้ normalize=True) เรียงจากมากไปน้อยครับ เอาไปต่อกับ .plot.bar() ได้เลยเพื่อวาดกราฟ

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
[normalize]ไม่บังคับ bool False ถ้า True จะคืนสัดส่วน (0.0–1.0) แทนจำนวนครั้ง เช่น 0.5 แทนที่จะเป็น 3 จาก 6 แถว
[sort]ไม่บังคับ bool True ถ้า True จะเรียงจากมากไปน้อย ถ้า False จะเรียงตาม index แทน
[ascending]ไม่บังคับ bool False ถ้า True จะเรียงจากน้อยไปมากแทน ใช้คู่กับ sort=True
[dropna]ไม่บังคับ bool True ถ้า False จะรวมการนับค่า NaN ในผลลัพธ์ด้วย ใช้ตรวจสอบว่ามีข้อมูลหายไปกี่แถว

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

Additional Notes

value_counts คือฟังก์ชันที่ผมใช้บ่อยมากตอนสำรวจข้อมูลครั้งแรกครับ 😎

เรียกใช้บน Series (หรือคอลัมน์ใน DataFrame) แล้วได้ Series กลับมาที่มี index เป็นค่าแต่ละประเภท และ values เป็นจำนวนครั้งที่พบ เรียงจากมากไปน้อยโดยอัตโนมัติ ค่า NaN จะถูกข้ามไปเว้นแต่ใส่ dropna=False

ที่เจ๋งคือใส่ normalize=True ได้เลยเพื่อเปลี่ยนจากจำนวนครั้งเป็นสัดส่วน (0.0–1.0) ทำให้เห็น % ของแต่ละกลุ่มทันที ไม่ต้องหารเองครับ ✨

ส่วนตัวผมใช้ value_counts เป็นขั้นตอนแรกเสมอก่อนทำ groupby หรือ filter ครับ เพราะมันบอกได้เร็วว่าข้อมูลมี category อะไรบ้างและสัดส่วนเป็นยังไง ถ้าเจอ category ที่พิมพ์ผิดนิดหน่อยเช่น ‘Bangkok’ กับ ‘bangkok’ ก็จะเห็นทันทีเลย

Examples

ตัวอย่างที่ 1: นับความถี่ของแต่ละเมืองs.value_counts()

ผมส่ง Series ของชื่อเมือง 6 ค่าเข้าไปครับ ได้ผลเรียงจากมากไปน้อยทันที Bangkok พบ 3 ครั้ง, Chiang Mai 2 ครั้ง, Phuket 1 ครั้ง เห็นภาพการกระจายได้เลย

>_
s.value_counts()

ผลลัพธ์Bangkok 3
Chiang Mai 2
Phuket 1
Name: count, dtype: int64
ตัวอย่างที่ 2: แสดงเป็นสัดส่วนด้วย normalize=Trues.value_counts(normalize=True)

ใส่ normalize=True ได้สัดส่วนออกมาแทนครับ Bangkok คิดเป็น 0.5 (50%), Chiang Mai 0.333 (33.3%), Phuket 0.167 (16.7%) ไม่ต้องหารเองเลย

>_
s.value_counts(normalize=True)

ผลลัพธ์Bangkok 0.500000
Chiang Mai 0.333333
Phuket 0.166667
Name: proportion, dtype: float64
ตัวอย่างที่ 3: เรียงจากน้อยไปมากด้วย ascending=Trues.value_counts(ascending=True)

ใส่ ascending=True เพื่อกลับทิศการเรียงครับ ได้ Phuket (1), Chiang Mai (2), Bangkok (3) — ใช้หา category ที่พบน้อยสุดเพื่อดูว่ามีข้อมูลเพียงพอหรือเปล่า

>_
s.value_counts(ascending=True)

ผลลัพธ์Phuket 1
Chiang Mai 2
Bangkok 3
Name: count, dtype: int64

FAQs

ใช้กับ DataFrame ทั้งหมดได้เลยไหม หรือต้องเลือก column ก่อน?+

ต้องเลือก column ก่อนครับ เพราะ value_counts เป็น method ของ Series ไม่ใช่ DataFrame เช่น df['city'].value_counts() ถ้า pandas เวอร์ชัน 1.1+ มี df.value_counts() ระดับ DataFrame แต่มันนับ combination ของทุก column แทน ไม่ค่อยได้ใช้เท่าไหร่

อยากดูเฉพาะ top 3 ค่าที่พบบ่อยสุด ทำยังไง?+

ต่อด้วย .head(3) ได้เลยครับ เช่น df['city'].value_counts().head(3) ได้ 3 เมืองที่พบบ่อยสุด ผมใช้แบบนี้ตอนข้อมูลมี category เยอะมากแต่อยากโฟกัสแค่อันดับต้นๆ

Resources & Related

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

ฟังก์ชันนี้pandas value_countsAggregation
Aggregation (4)
pandas describe

df.describe() ใน pandas ผมใช้สำหรับดูสถิติพื้นฐานของข้อมูลในทุกคอลัมน์พร้อมกันในคำสั่งเดียว ทั้ง count, mean, std, min, max และ percentile ช่วยให้เข้าใจภาพรวมของชุดข้อมูลได้เร็วมากก่อนเริ่มวิเคราะห์จริงครับ

pandas groupby

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

pandas nunique

nunique ใน pandas ผมใช้นับว่าในแต่ละคอลัมน์มีค่าที่ไม่ซ้ำกันกี่ตัว เหมือนกับการ Remove Duplicates ใน Excel แล้วนับจำนวนที่เหลือ หรือนับ unique ด้วย COUNTA นั่นแหละครับ เหมาะมากตอนอยากรู้ว่าข้อมูลมีกี่ลูกค้า กี่จังหวัด หรือกี่ประเภท

pandas pivot_table

pivot_table ใน pandas ผมใช้สำหรับสร้างตารางสรุปข้อมูลแบบ PivotTable เหมือนใน Excel เลยครับ — กำหนดได้ว่าจะเอาคอลัมน์ไหนเป็น rows, columns และจะรวมค่าด้วยฟังก์ชันอะไร ทั้งหมดจบในคำสั่งเดียว

Transform (1)
numpy unique

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

Cleaning (1)
pandas drop_duplicates

drop_duplicates ใน pandas ผมใช้สำหรับลบแถวข้อมูลที่ซ้ำกันออกจาก DataFrame เหมือนกับปุ่ม Remove Duplicates ใน Excel เลยครับ แต่ยืดหยุ่นกว่าตรงที่เราเลือกได้ว่าจะดูซ้ำจากคอลัมน์ไหน และจะเก็บแถวแรกหรือแถวสุดท้ายไว้

Comments

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