---
title: pandas between — เช็คว่าค่าอยู่ในช่วงที่กำหนดไหม
url: https://www.thepexcel.com/functions/python/logic/pandas-between/
type: function-explainer
program: Python
syntax: "df['col'].between(left, right)"
date: 2026-05-31
scores:
  popularity: 5
  difficulty: 2
  usefulness: 5
---

# pandas between — เช็คว่าค่าอยู่ในช่วงที่กำหนดไหม

> between ใน pandas ผมใช้เช็คว่าค่าในคอลัมน์อยู่ในช่วง [left, right] หรือเปล่า คืนออกมาเป็น Series ของ

## คำอธิบาย

between ใน pandas ผมใช้เช็คว่าค่าในคอลัมน์อยู่ในช่วง [left, right] หรือเปล่า คืนออกมาเป็น Series ของ True/False (เรียกว่า boolean mask) เอาไปกรองแถวต่อได้เลย ถ้าใครเคยเขียนเงื่อนไขใน Excel แบบ ยอด >= 100 AND <= 500 ตัวนี้คือคำสั่งสั้นๆ ที่ทำแบบนั้นให้ในบรรทัดเดียวครับ

## Syntax

```excel
df['col'].between(left, right)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| left | Yes | scalar |  | ขอบล่างของช่วง เช่น 100 หรือวันที่ '2024-01-01' โดยปกติจะนับค่านี้เข้าช่วงด้วย (inclusive) |
| right | Yes | scalar |  | ขอบบนของช่วง เช่น 500 หรือวันที่ '2024-12-31' โดยปกติจะนับค่านี้เข้าช่วงด้วย (inclusive) |
| inclusive | No | str | both | กำหนดว่าจะนับขอบเข้าช่วงไหม รับค่า 'both' (ค่าเริ่มต้น นับทั้งสองฝั่ง), 'neither' (ไม่นับทั้งคู่), 'left' (นับเฉพาะขอบล่าง), 'right' (นับเฉพาะขอบบน) |

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ได้ boolean mask True/False ออกมา

```excel
df['sales'].between(100, 500)
```

**ผลลัพธ์:** `0    False
1     True
2     True
3    False
Name: sales, dtype: bool`

ผมเช็คคอลัมน์ sales ว่าค่าไหนอยู่ในช่วง 100 ถึง 500 บ้าง ผลที่ได้คือ Series ของ True/False ยาวเท่าจำนวนแถวเดิม — แถว A (80) ได้ False เพราะต่ำกว่า 100, แถว B (100) กับ C (300) ได้ True, ส่วน D (600) ได้ False เพราะเกิน 500 ครับ ตัว Series นี้แหละที่เราเรียกว่า mask

### 2. ตัวอย่างที่ 2: เอา mask ไปกรองแถวจริงด้วย df[...]

```excel
df[df['sales'].between(100, 500)]
```

**ผลลัพธ์:** `  name  sales
1    B    100
2    C    300`

คราวนี้ผมเอา mask จากตัวอย่างที่แล้วมาใส่ใน df[...] เพื่อให้มันกรองเอาเฉพาะแถวที่เป็น True ออกมา ผลที่ได้คือ DataFrame ที่เหลือแค่แถว B กับ C ครับ — นี่คือ pattern ที่ผมใช้บ่อยสุด คือ between สร้าง mask แล้วเอามากรองตารางในขั้นตอนเดียว

### 3. ตัวอย่างที่ 3: ไม่นับขอบด้วย inclusive='neither'

```excel
df['sales'].between(100, 500, inclusive='neither')
```

**ผลลัพธ์:** `0    False
1    False
2     True
3    False
Name: sales, dtype: bool`

ปกติ between นับขอบ 100 และ 500 เข้าช่วงด้วย แต่พอผมใส่ inclusive='neither' มันจะตัดขอบทั้งสองฝั่งทิ้ง เหลือเฉพาะค่าที่ มากกว่า 100 และ น้อยกว่า 500 จริงๆ — ผลคือแถว B (100) เปลี่ยนจาก True เป็น False เพราะตอนนี้ไม่นับค่าที่เท่ากับขอบล่างแล้วครับ

### 4. ตัวอย่างที่ 4: กรองช่วงวันที่ก็ได้

```excel
df[df['date'].between('2024-03-01', '2024-09-30')]
```

**ผลลัพธ์:** `  order       date
1     y 2024-06-15`

between ไม่ได้ใช้ได้แค่กับตัวเลขนะครับ ใช้กับวันที่ก็ได้เหมือนกัน ผมกรองเอาเฉพาะ order ที่วันที่อยู่ในช่วง มีนาคม–กันยายน 2024 ผลที่ได้เหลือแค่แถว y (15 มิ.ย.) แถวเดียว เพราะอีกสองแถวอยู่นอกช่วง — เวลาทำรายงานตามช่วงเวลา ผมใช้ท่านี้บ่อยมากครับ

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

- 💡 ถ้าอยากได้ผลตรงข้าม คือเอาเฉพาะค่าที่อยู่ นอก ช่วง ให้เติม ~ (tilde) หน้า mask เลยครับ เช่น df[~df['sales'].between(100, 500)] จะได้แถวที่ต่ำกว่า 100 หรือเกิน 500 — ผมใช้บ่อยตอนหาค่าผิดปกติ (outlier)

- เวลากรองช่วงวันที่ ผมแนะนำให้ทำให้คอลัมน์เป็น datetime ก่อน (ด้วย pd.to_datetime) แล้วค่อยใช้ between จะชัวร์กว่า ไม่งั้นถ้ามันยังเป็น text อยู่ การเทียบช่วงอาจเพี้ยนได้ครับ

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

**Q: between นับค่าที่เท่ากับ left กับ right เข้าไปด้วยไหม?**

by default นับเข้าไปด้วยครับ คือเป็น inclusive ทั้งสองฝั่ง ค่าที่เท่ากับ left หรือ right พอดีจะได้ True ถ้าผมไม่อยากนับขอบ ก็ใส่ inclusive='neither' หรือจะนับเฉพาะฝั่งเดียวด้วย 'left'/'right' ก็ได้ ผมว่าจุดนี้คนพลาดบ่อย เพราะ Excel บางสูตรไม่นับขอบ แต่ between นับให้เลย

**Q: ทำไมต้องเขียน df[df['col'].between(...)] ซ้ำชื่อ df สองรอบ?**

เพราะ between คืนแค่ mask (Series ของ True/False) ที่ยังไม่ได้กรองอะไรครับ ตัว df[...] ข้างนอกต่างหากที่เป็นคนเอา mask ไปเลือกแถวจริง คิดง่ายๆ คือ between = สร้างเงื่อนไข ส่วน df[...] = เอาเงื่อนไขไปกรอง สองหน้าที่คนละขั้นตอนกัน เลยต้องเขียน df ทั้งข้างในและข้างนอกครับ

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

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

---

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