Thep Excel

pandas reset_index — เปลี่ยน index กลับมาเป็นคอลัมน์ปกติ

reset_index ผมใช้สำหรับเปลี่ยน index ของ DataFrame กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ต index ใหม่เป็น 0, 1, 2, … ตามลำดับ — ส่วนใหญ่จะโผล่หลัง groupby ทุกครั้งที่อยากนำผลลัพธ์ไปใช้งานต่อครับ

df.reset_index(drop, inplace)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

df.reset_index(drop, inplace)

คืนค่า (Returns)
DataFrame

คืน DataFrame ใหม่ที่ index ถูก reset เป็น 0, 1, 2, … และ index เก่ากลายเป็นคอลัมน์ปกติ (ถ้าไม่ได้ใส่ drop=True) พร้อมเอาไปใช้งานต่อหรือ chain ได้เลยครับ

Argument Type Required Default Description
drop bool Optional False ถ้า True จะทิ้ง index เก่าทิ้งเลย ไม่นำมาเป็นคอลัมน์ใหม่ ใช้ตอนที่ index เดิมไม่มีความหมาย เช่น หลังจาก sort หรือ filter แล้วอยากได้แค่เลขลำดับแถวใหม่สะอาดๆ
inplace bool Optional False ถ้า True จะแก้ DataFrame ตัวเดิมเลย ไม่คืนค่าออกมา ผมแนะนำให้ใช้แบบ default (False) แล้วรับค่าใน variable ใหม่จะปลอดภัยกว่าครับ

Examples

ตัวอย่างที่ 1: reset_index หลัง groupby — กรณีที่เจอบ่อยที่สุด
grouped.reset_index()
ผมจัดกลุ่มยอดขายตามเมืองไว้ใน grouped ก่อนครับ ตอนนั้น city ไปอยู่เป็น index ไม่ใช่คอลัมน์ พอเรียก reset_index() ก็จะได้ DataFrame กลับมาที่มีทั้ง city และ sales เป็นคอลัมน์ปกติ พร้อมเลขลำดับแถว 0, 1 เหมือนตารางทั่วไปเลยครับ ขั้นตอนนี้เหมือนกด Copy Paste Value ออกจาก PivotTable ใน Excel
Python Code:

grouped.reset_index()

Result:

city sales
0 Bangkok 250
1 Chiang Mai 450

ตัวอย่างที่ 2: drop=True — ทิ้ง index เก่า ไม่เอามาเป็นคอลัมน์
filtered.reset_index(drop=True)
หลังจาก filter เอาแค่ product ที่ score >= 85 ผมได้ DataFrame ที่มีแถวเลขกระโดด (index 1, 3, 4) ครับ พอใช้ reset_index(drop=True) index ใหม่จะเป็น 0, 1, 2 สะอาดเลย โดยไม่มีคอลัมน์ index เก่ามาแทรก ถ้าไม่ใส่ drop=True มันจะเพิ่มคอลัมน์ชื่อ 'index' มาให้ด้วยซึ่งส่วนใหญ่ผมไม่ได้ต้องการครับ
Python Code:

filtered.reset_index(drop=True)

Result:

product score
0 B 95
1 D 88
2 E 91

ตัวอย่างที่ 3: groupby หลายคอลัมน์แล้ว reset_index
summary.reset_index()
ตอน groupby หลายคอลัมน์ pandas จะสร้าง MultiIndex (index หลายชั้น) ซึ่งทำงานต่อยากมากครับ reset_index() จัดการให้ทุกคอลัมน์กลับมาอยู่ในระนาบเดียวกันหมด — region, product, sales ออกมาเป็นคอลัมน์ธรรมดา 3 คอลัมน์ เอาไป merge หรือ export ได้เลยโดยไม่ต้องแก้อะไรเพิ่มอีก
Python Code:

summary.reset_index()

Result:

region product sales
0 North A 220
1 North B 200
2 South A 150
3 South B 300

ตัวอย่างที่ 4: reset_index หลัง sort_values เพื่อเรียงลำดับใหม่
sorted_df.reset_index(drop=True)
หลัง sort_values แถวจะเรียงตาม score แต่ index ยังเป็น 1, 3, 2, 0 ตามลำดับเดิมครับ ถ้าเราอยากให้แถวอันดับ 1 มี index=0 ต้องใช้ reset_index(drop=True) เพื่อ reset เป็นลำดับใหม่ ผมใช้บ่อยตอนสร้าง 'Top N' report แล้วอยากให้เลข ranking เริ่มจาก 0 หรือ 1 ที่ถูกต้องครับ
Python Code:

sorted_df.reset_index(drop=True)

Result:

name score
0 Bob 95
1 Diana 90
2 Alice 88
3 Charlie 72

FAQs

ทำไม AI ถึงเขียน .reset_index() หลัง groupby แทบทุกครั้ง จำเป็นไหม?

จำเป็นในงานจริงครับ เพราะหลัง groupby คอลัมน์ที่ใช้จัดกลุ่มจะกลายเป็น index ไม่ใช่คอลัมน์ ถ้าอยากทำต่อเช่น merge กับตารางอื่น หรือ export เป็น Excel แล้วเห็นคอลัมน์ครบ ต้อง reset ก่อน ผมลืมครั้งแรก แล้วได้ KeyError ตอน merge ซึ่งงงมากเพราะเห็นว่าชื่อคอลัมน์มีอยู่ แต่ดันอยู่ใน index ไม่ใช่คอลัมน์ครับ

ต่างกันยังไงระหว่างใส่ drop=True กับไม่ใส่?

ถ้าไม่ใส่ drop (default=False) index เก่าจะถูกเพิ่มเป็นคอลัมน์ใหม่ให้ครับ — เหมาะตอนที่ index มีความหมาย เช่น หลัง groupby ที่ index คือชื่อเมือง ถ้าใส่ drop=True index เก่าจะถูกทิ้งทันที — เหมาะตอน index เป็นแค่เลขลำดับที่ไม่มีความหมาย เช่น หลัง sort หรือ filter ผมใช้ drop=True ประมาณ 60% ของเวลาครับ

ต่างจาก set_index ยังไง?

เป็นตรงข้ามกันเลยครับ set_index เอาคอลัมน์ไปเป็น index ส่วน reset_index เอา index กลับมาเป็นคอลัมน์ ถ้านึกภาพ Excel คือ set_index = กำหนดคอลัมน์แรกเป็น row header, reset_index = เอา row header กลับมาเป็นคอลัมน์ปกติ

Resources & Related

Additional Notes

ใน pandas ทุกครั้งที่เราทำ groupby ผลที่ได้จะมีคอลัมน์ที่ใช้จัดกลุ่ม (เช่น ‘city’ หรือ ‘dept’) ไปอยู่เป็น index แถวแทนที่จะเป็นคอลัมน์ปกติครับ ซึ่งดูเหมือนไม่ใช่เรื่องใหญ่ แต่พอเราอยากเอาผลไปทำงานต่อ เช่น merge กับตารางอื่น หรือ export เป็น Excel นั่นแหละปัญหาเริ่มโผล่ reset_index จึงเป็นตัวแก้ปัญหานี้ตรงๆ — มันดึงค่า index กลับมาเป็นคอลัมน์ธรรมดา แล้วเซ็ตเลขลำดับแถว 0, 1, 2 ให้ใหม่

ที่เจ๋งคือ reset_index เป็นเหมือน “ปิดจบ” ของ chain หลัง groupby ครับ ถ้าเห็น AI เขียนโค้ด pandas แล้วมี .reset_index() ท้ายสุด ไม่ต้องงง — มันแค่แปลง index กลับมาเพื่อให้ DataFrame พร้อมใช้งานต่อ เหมือนกด Refresh PivotTable แล้วได้ตารางที่คัดลอกออกมาได้เลยครับ 😎

ส่วนตัวผม reset_index ติดมือมากครับ แทบทุก groupby ผมจะตามด้วย .reset_index() เสมอ เพราะงานจริงต้องเอาผลลัพธ์ไป merge หรือ export แทบทุกครั้ง — ถ้าไม่ reset แล้วไป merge จะ error งงหาสาเหตุไม่เจอ

Leave a Reply

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