Thep Excel

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

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

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

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
2/10

Usefulness
5/10

Syntax & Arguments

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

คืนค่า (Returns)
Series

between คืนเป็น Series ของ True/False (boolean mask) ที่ยาวเท่าจำนวนแถวเดิมครับ — ตัวมันเองยังไม่ได้กรองอะไร ต้องเอาไปใส่ใน df[…] อีกทีถึงจะได้แถวที่เข้าเงื่อนไขจริง

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

Examples

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

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

Result:

0 False
1 True
2 True
3 False
Name: sales, dtype: bool

ตัวอย่างที่ 2: เอา mask ไปกรองแถวจริงด้วย df[…]
df[df['sales'].between(100, 500)]
คราวนี้ผมเอา mask จากตัวอย่างที่แล้วมาใส่ใน df[…] เพื่อให้มันกรองเอาเฉพาะแถวที่เป็น True ออกมา ผลที่ได้คือ DataFrame ที่เหลือแค่แถว B กับ C ครับ — นี่คือ pattern ที่ผมใช้บ่อยสุด คือ between สร้าง mask แล้วเอามากรองตารางในขั้นตอนเดียว
Python Code:

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

Result:

name sales
1 B 100
2 C 300

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

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

Result:

0 False
1 False
2 True
3 False
Name: sales, dtype: bool

ตัวอย่างที่ 4: กรองช่วงวันที่ก็ได้
df[df['date'].between('2024-03-01', '2024-09-30')]
between ไม่ได้ใช้ได้แค่กับตัวเลขนะครับ ใช้กับวันที่ก็ได้เหมือนกัน ผมกรองเอาเฉพาะ order ที่วันที่อยู่ในช่วง มีนาคม–กันยายน 2024 ผลที่ได้เหลือแค่แถว y (15 มิ.ย.) แถวเดียว เพราะอีกสองแถวอยู่นอกช่วง — เวลาทำรายงานตามช่วงเวลา ผมใช้ท่านี้บ่อยมากครับ
Python Code:

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

Result:

order date
1 y 2024-06-15

FAQs

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

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

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

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

Resources & Related

Additional Notes

between เป็นหนึ่งในคำสั่งที่ผมเจอบ่อยมากในโค้ด pandas ที่ AI เขียนให้ เพราะมันสั้นและอ่านง่ายกว่าเขียนเงื่อนไข 2 อันมาต่อกันครับ

หน้าที่ของมันคือเช็คทีละค่าในคอลัมน์ว่า อยู่ระหว่าง left กับ right ไหม แล้วคืนเป็น Series ของ True/False ที่ยาวเท่ากับจำนวนแถวเดิม — ตัวนี้แหละที่เรียกว่า boolean mask

ถ้าเทียบกับ Excel ก็เหมือนเราเขียน =AND(A2>=100, A2<=500) ลากลงทุกแถว แต่ between เขียนแค่ df['col'].between(100, 500) ก็จบครับ ไม่ต้องพิมพ์ตัวแปรซ้ำสองรอบ

ที่เจ๋งคือ mask ที่ได้เอาไปใส่ใน df[…] เพื่อ กรองเอาเฉพาะแถวที่เข้าเงื่อนไข ได้ทันที และ between ทำงานได้ทั้งตัวเลขและวันที่ — เวลากรองข้อมูลตามช่วงวันที่ ผมใช้ตัวนี้ประจำเลยครับ 😎

จุดที่ต้องระวังนิดนึง: by default between เป็นแบบ inclusive ทั้งสองฝั่ง คือนับ left และ right เข้าไปด้วย ถ้าอยากเปลี่ยนให้ใช้ argument inclusive ได้ครับ

Leave a Reply

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