Thep Excel

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

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

s.value_counts()

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

s.value_counts()

คืนค่า (Returns)
Series

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

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

Examples

ตัวอย่างที่ 1: นับความถี่ของแต่ละเมือง
s.value_counts()
ผมส่ง Series ของชื่อเมือง 6 ค่าเข้าไปครับ ได้ผลเรียงจากมากไปน้อยทันที Bangkok พบ 3 ครั้ง, Chiang Mai 2 ครั้ง, Phuket 1 ครั้ง เห็นภาพการกระจายได้เลย
Python Code:

s.value_counts()

Result:

Bangkok 3
Chiang Mai 2
Phuket 1
Name: count, dtype: int64

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

s.value_counts(normalize=True)

Result:

Bangkok 0.500000
Chiang Mai 0.333333
Phuket 0.166667
Name: proportion, dtype: float64

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

s.value_counts(ascending=True)

Result:

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

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’ ก็จะเห็นทันทีเลย

Leave a Reply

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