---
title: pandas groupby — จัดกลุ่มข้อมูลและคำนวณแบบกลุ่ม
url: https://www.thepexcel.com/functions/python/aggregation/pandas-groupby/
type: function-explainer
program: Python
syntax: df.groupby(by)
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 3
  usefulness: 5
---

# pandas groupby — จัดกลุ่มข้อมูลและคำนวณแบบกลุ่ม

> groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่

## คำอธิบาย

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

## Syntax

```excel
df.groupby(by)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| by | Yes | str \| list |  | ชื่อคอลัมน์ที่ใช้จัดกลุ่ม เช่น 'city' หรือ ['dept', 'year'] สำหรับจัดกลุ่มหลายคอลัมน์พร้อมกัน |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: หายอดขายรวมแต่ละเมือง

```excel
df.groupby('city')['sales'].sum()
```

**ผลลัพธ์:** `city
Bangkok       250
Chiang Mai    450
Name: sales, dtype: int64`

ผมจัดกลุ่มข้อมูลตามคอลัมน์ city แล้วรวมยอดขายในแต่ละเมือง Bangkok ได้ 250 (100+150) ส่วน Chiang Mai ได้ 450 (200+250) ครับ เขียนบรรทัดเดียวจบเลย

### 2. ตัวอย่างที่ 2: หาเงินเดือนเฉลี่ยแต่ละแผนก

```excel
df.groupby('dept')['salary'].mean()
```

**ผลลัพธ์:** `dept
HR    55000.0
IT    80000.0
Name: salary, dtype: float64`

คราวนี้ผมเปลี่ยนจาก sum มาเป็น mean เพื่อหาค่าเฉลี่ยเงินเดือนแต่ละแผนก แผนก HR มีพนักงาน 2 คน เฉลี่ยได้ 55,000 บาท ส่วน IT มี 3 คน เฉลี่ย 80,000 บาทครับ

### 3. ตัวอย่างที่ 3: คำนวณหลายค่าสถิติพร้อมกันด้วย agg

```excel
df.groupby('dept')['salary'].agg(['sum', 'mean', 'max'])
```

**ผลลัพธ์:** `         sum     mean    max
dept                        
HR    110000  55000.0  60000
IT    240000  80000.0  90000`

อันนี้คือลูกเล่นที่ผมชอบมากครับ ใช้ agg สั่งคำนวณ sum, mean, max ของเงินเดือนในแต่ละแผนกพร้อมกันรวดเดียว ได้ผลออกมาเป็น DataFrame 3 คอลัมน์เลย ไม่ต้องเขียนแยก 3 รอบ 💡

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

- 💡 หลัง groupby ผลลัพธ์จะเอาคอลัมน์ที่จัดกลุ่มไปเป็น index ครับ ถ้าอยากได้กลับมาเป็นคอลัมน์ปกติเพื่อเอาไปทำงานต่อ ให้ต่อท้ายด้วย .reset_index() ผมใช้ประจำเลย

- อีกวิธีที่สั้นกว่าคือใส่ as_index=False ตอน groupby ไปเลย เช่น df.groupby('city', as_index=False) คอลัมน์ที่จัดกลุ่มก็จะยังเป็นคอลัมน์ปกติ ไม่กลายเป็น index ครับ

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

**Q: ต่างจากการเขียน for loop วนจัดกลุ่มเองยังไง?**

ต่างกันเยอะมากครับ 😅 groupby เร็วกว่าเพราะเบื้องหลังมันทำงานในภาษา C ไม่ได้วน loop ใน Python ทีละแถว ข้อมูลระดับ 1 ล้านแถว groupby เสร็จในหลัก milliseconds แต่ถ้าเขียน for loop เองอาจรอหลายวินาที ส่วนตัวผมเลยไม่เขียน loop จัดกลุ่มเองแล้วครับ ปวดหัวเปล่าๆ

**Q: จัดกลุ่มตามหลายคอลัมน์พร้อมกันได้ไหม?**

ได้เลยครับ แค่ใส่ชื่อคอลัมน์เป็น list เช่น df.groupby(['dept', 'year'])['salary'].mean() ก็จะได้ค่าเฉลี่ยแยกตามแผนกและปีพร้อมกัน เหมือนเราลากหลายฟิลด์เข้า Rows ใน PivotTable นั่นแหละครับ

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

- [pandas groupby: split-apply-combine (official docs)](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html) _(article)_

---

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