Series.value_counts() ใน pandas ผมใช้สำหรับนับว่าแต่ละค่าใน column ปรากฏกี่ครั้ง ได้ผลเรียงจากมากไปน้อยอัตโนมัติ ใช้ดูการกระจายของข้อมูลหรือหาค่าที่พบบ่อยสุดได้เร็วมากครับ
s.value_counts()
s.value_counts()
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 ในผลลัพธ์ด้วย ใช้ตรวจสอบว่ามีข้อมูลหายไปกี่แถว |
s.value_counts()s.value_counts()
Bangkok 3
Chiang Mai 2
Phuket 1
Name: count, dtype: int64
s.value_counts(normalize=True)s.value_counts(normalize=True)
Bangkok 0.500000
Chiang Mai 0.333333
Phuket 0.166667
Name: proportion, dtype: float64
s.value_counts(ascending=True)s.value_counts(ascending=True)
Phuket 1
Chiang Mai 2
Bangkok 3
Name: count, dtype: int64
ต้องเลือก column ก่อนครับ เพราะ value_counts เป็น method ของ Series ไม่ใช่ DataFrame เช่น df[‘city’].value_counts() ถ้า pandas เวอร์ชัน 1.1+ มี df.value_counts() ระดับ DataFrame แต่มันนับ combination ของทุก column แทน ไม่ค่อยได้ใช้เท่าไหร่
ต่อด้วย .head(3) ได้เลยครับ เช่น df[‘city’].value_counts().head(3) ได้ 3 เมืองที่พบบ่อยสุด ผมใช้แบบนี้ตอนข้อมูลมี category เยอะมากแต่อยากโฟกัสแค่อันดับต้นๆ
value_counts คือฟังก์ชันที่ผมใช้บ่อยมากตอนสำรวจข้อมูลครั้งแรกครับ 😎
เรียกใช้บน Series (หรือคอลัมน์ใน DataFrame) แล้วได้ Series กลับมาที่มี index เป็นค่าแต่ละประเภท และ values เป็นจำนวนครั้งที่พบ เรียงจากมากไปน้อยโดยอัตโนมัติ ค่า NaN จะถูกข้ามไปเว้นแต่ใส่ dropna=False
ที่เจ๋งคือใส่ normalize=True ได้เลยเพื่อเปลี่ยนจากจำนวนครั้งเป็นสัดส่วน (0.0–1.0) ทำให้เห็น % ของแต่ละกลุ่มทันที ไม่ต้องหารเองครับ ✨
ส่วนตัวผมใช้ value_counts เป็นขั้นตอนแรกเสมอก่อนทำ groupby หรือ filter ครับ เพราะมันบอกได้เร็วว่าข้อมูลมี category อะไรบ้างและสัดส่วนเป็นยังไง ถ้าเจอ category ที่พิมพ์ผิดนิดหน่อยเช่น ‘Bangkok’ กับ ‘bangkok’ ก็จะเห็นทันทีเลย