DataFrame
คืน DataFrame ใหม่ที่ index ถูก reset เป็น 0, 1, 2, … และ index เก่ากลายเป็นคอลัมน์ปกติ (ถ้าไม่ได้ใส่ drop=True) พร้อมเอาไปใช้งานต่อหรือ chain ได้เลยครับ
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| [drop]ไม่บังคับ | bool | False | ถ้า True จะทิ้ง index เก่าทิ้งเลย ไม่นำมาเป็นคอลัมน์ใหม่ ใช้ตอนที่ index เดิมไม่มีความหมาย เช่น หลังจาก sort หรือ filter แล้วอยากได้แค่เลขลำดับแถวใหม่สะอาดๆ |
| [inplace]ไม่บังคับ | bool | False | ถ้า True จะแก้ DataFrame ตัวเดิมเลย ไม่คืนค่าออกมา ผมแนะนำให้ใช้แบบ default (False) แล้วรับค่าใน variable ใหม่จะปลอดภัยกว่าครับ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
ใน 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 งงหาสาเหตุไม่เจอ
ผมจัดกลุ่มยอดขายตามเมืองไว้ใน grouped ก่อนครับ ตอนนั้น city ไปอยู่เป็น index ไม่ใช่คอลัมน์ พอเรียก reset_index() ก็จะได้ DataFrame กลับมาที่มีทั้ง city และ sales เป็นคอลัมน์ปกติ พร้อมเลขลำดับแถว 0, 1 เหมือนตารางทั่วไปเลยครับ ขั้นตอนนี้เหมือนกด Copy Paste Value ออกจาก PivotTable ใน Excel
หลังจาก filter เอาแค่ product ที่ score >= 85 ผมได้ DataFrame ที่มีแถวเลขกระโดด (index 1, 3, 4) ครับ พอใช้ reset_index(drop=True) index ใหม่จะเป็น 0, 1, 2 สะอาดเลย โดยไม่มีคอลัมน์ index เก่ามาแทรก ถ้าไม่ใส่ drop=True มันจะเพิ่มคอลัมน์ชื่อ 'index' มาให้ด้วยซึ่งส่วนใหญ่ผมไม่ได้ต้องการครับ
ตอน groupby หลายคอลัมน์ pandas จะสร้าง MultiIndex (index หลายชั้น) ซึ่งทำงานต่อยากมากครับ reset_index() จัดการให้ทุกคอลัมน์กลับมาอยู่ในระนาบเดียวกันหมด — region, product, sales ออกมาเป็นคอลัมน์ธรรมดา 3 คอลัมน์ เอาไป merge หรือ export ได้เลยโดยไม่ต้องแก้อะไรเพิ่มอีก
หลัง sort_values แถวจะเรียงตาม score แต่ index ยังเป็น 1, 3, 2, 0 ตามลำดับเดิมครับ ถ้าเราอยากให้แถวอันดับ 1 มี index=0 ต้องใช้ reset_index(drop=True) เพื่อ reset เป็นลำดับใหม่ ผมใช้บ่อยตอนสร้าง 'Top N' report แล้วอยากให้เลข ranking เริ่มจาก 0 หรือ 1 ที่ถูกต้องครับ
จำเป็นในงานจริงครับ เพราะหลัง groupby คอลัมน์ที่ใช้จัดกลุ่มจะกลายเป็น index ไม่ใช่คอลัมน์ ถ้าอยากทำต่อเช่น merge กับตารางอื่น หรือ export เป็น Excel แล้วเห็นคอลัมน์ครบ ต้อง reset ก่อน ผมลืมครั้งแรก แล้วได้ KeyError ตอน merge ซึ่งงงมากเพราะเห็นว่าชื่อคอลัมน์มีอยู่ แต่ดันอยู่ใน index ไม่ใช่คอลัมน์ครับ
ถ้าไม่ใส่ drop (default=False) index เก่าจะถูกเพิ่มเป็นคอลัมน์ใหม่ให้ครับ — เหมาะตอนที่ index มีความหมาย เช่น หลัง groupby ที่ index คือชื่อเมือง ถ้าใส่ drop=True index เก่าจะถูกทิ้งทันที — เหมาะตอน index เป็นแค่เลขลำดับที่ไม่มีความหมาย เช่น หลัง sort หรือ filter ผมใช้ drop=True ประมาณ 60% ของเวลาครับ
เป็นตรงข้ามกันเลยครับ set_index เอาคอลัมน์ไปเป็น index ส่วน reset_index เอา index กลับมาเป็นคอลัมน์ ถ้านึกภาพ Excel คือ set_index = กำหนดคอลัมน์แรกเป็น row header, reset_index = เอา row header กลับมาเป็นคอลัมน์ปกติ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas reset_index จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
drop ใน pandas ผมใช้สำหรับตัดคอลัมน์หรือแถวที่ไม่ต้องการออกจาก DataFrame โดยระบุชื่อเองโดยตรง เหมือนการ "ลบคอลัมน์" ใน Excel แบบเลือกได้เป๊ะๆ ว่าจะเอาคอลัมน์ไหนออกครับ
rename ใน pandas ผมใช้สำหรับเปลี่ยนชื่อคอลัมน์หรือ index ใน DataFrame โดยส่ง dict บอกว่า 'ชื่อเดิม' ควรกลายเป็น 'ชื่อใหม่' อะไร เหมือนการ Rename column header ใน Excel แต่ทำแบบโปรแกรมได้ครับ
set_index ใน pandas ผมใช้สำหรับตั้งคอลัมน์ใดคอลัมน์หนึ่ง (หรือหลายคอลัมน์) ให้กลายเป็น index หลักของ DataFrame เหมือนกับการกำหนดคีย์หลักให้ตาราง เพื่อให้ค้นหาข้อมูลด้วย .loc[] ได้อย่างรวดเร็วและตรงจุดครับ
df.sort_values() ใน pandas ผมใช้สำหรับเรียงลำดับแถวใน DataFrame ตามค่าของคอลัมน์ที่กำหนด เรียงจากน้อยไปมากหรือมากไปน้อยก็ได้ และยังเรียงตามหลายคอลัมน์พร้อมกันได้ด้วยครับ
groupby ใน pandas ผมใช้สำหรับจัดกลุ่มข้อมูลใน DataFrame แล้วคำนวณค่าสรุปในแต่ละกลุ่ม เช่น หาผลรวม ค่าเฉลี่ย หรือค่าสถิติต่างๆ ตามหมวดหมู่ที่กำหนด ถ้าใครเคยใช้ PivotTable ใน Excel มาก่อน บอกเลยว่าตัวนี้คือเครื่องมือสายเดียวกันเลยครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่