---
title: pandas value_counts — นับความถี่ของแต่ละค่าใน Series
url: https://www.thepexcel.com/functions/python/aggregation/pandas-value-counts/
type: function-explainer
program: Python
syntax: s.value_counts()
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

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

> Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน

## คำอธิบาย

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

## Syntax

```excel
s.value_counts()
```

## Arguments

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

## ตัวอย่าง

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

```excel
s.value_counts()
```

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

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

### 2. ตัวอย่างที่ 2: แสดงเป็นสัดส่วนด้วย normalize=True

```excel
s.value_counts(normalize=True)
```

**ผลลัพธ์:** `Bangkok       0.500000
Chiang Mai    0.333333
Phuket        0.166667
Name: proportion, dtype: float64`

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

### 3. ตัวอย่างที่ 3: เรียงจากน้อยไปมากด้วย ascending=True

```excel
s.value_counts(ascending=True)
```

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

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

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้รัน value_counts() ทุกคอลัมน์ที่เป็น category ก่อนเริ่มวิเคราะห์ครับ ช่วยจับค่าที่พิมพ์ผิดได้เร็วมาก เช่น 'Bangkok' กับ 'bangkok' หรือ 'HR ' กับ 'HR' (มีช่องว่างท้าย) ถ้าไม่จับตรงนี้ groupby จะแยกเป็นคนละกลุ่มแล้วผลผิดครับ

- ส่วนตัวผมชอบต่อ .plot.bar() ต่อท้ายเพื่อวาด bar chart ดูการกระจายได้เลย เช่น df['status'].value_counts().plot.bar() ดูง่ายกว่าตัวเลขมากตอนนำเสนอครับ

## คำถามที่พบบ่อย

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

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

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

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

## แหล่งข้อมูลเพิ่มเติม

- [pandas.Series.value_counts — pandas official docs](https://pandas.pydata.org/docs/reference/api/pandas.Series.value_counts.html) _(article)_

---

_Source: [https://www.thepexcel.com/functions/python/aggregation/pandas-value-counts/](https://www.thepexcel.com/functions/python/aggregation/pandas-value-counts/)_
