การกำหนดและรีเซ็ตดัชนี
ยกระดับคอลัมน์ให้เป็นดัชนีแถวด้วย set_index() รีเซ็ตกลับด้วย reset_index() และทำความเข้าใจภาพรวมของ MultiIndex
การกำหนดและรีเซ็ตดัชนี เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
ดัชนีของ DataFrame คืออะไร
DataFrame ของ Pandas ทุกตัวมีดัชนีแถว ซึ่งเป็นชุดป้ายกำกับที่เชื่อมโยงกับแต่ละแถว ดัชนีเริ่มต้นคือ RangeIndex (0, 1, 2, …) แต่คุณสามารถแทนที่ด้วยคอลัมน์ใดก็ได้ที่ทำหน้าที่เป็นตัวระบุโดยธรรมชาติ เช่น วันที่ ID สินค้า ID ผู้ใช้ หรือคีย์ที่ไม่ซ้ำกัน ดัชนีที่มีความหมายช่วยให้อ่านข้อมูลได้ง่ายขึ้น เปิดให้เลือกช่วงข้อมูลตามป้ายกำกับ และจำเป็นสำหรับการสุ่มตัวอย่างใหม่ของอนุกรมเวลา
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist()) # [0, 1, 2]
print(df)set_index() — ยกระดับคอลัมน์เป็นดัชนี
DataFrame.set_index('col') จะยกระดับคอลัมน์ที่ระบุให้เป็นดัชนีแถว และนำคอลัมน์นั้นออกจากคอลัมน์ปกติ ค่าของคอลัมน์จะกลายเป็นป้ายกำกับแถว นี่เป็นวิธีมาตรฐานในการทำให้ DataFrame สื่อความหมายมากขึ้นเมื่อคอลัมน์หนึ่งทำหน้าที่เป็นคีย์โดยธรรมชาติ เมธอดนี้ส่งคืน DataFrame ใหม่ โดยข้อมูลเดิมจะไม่เปลี่ยนแปลง เว้นแต่จะใช้ inplace=True
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
df = df.set_index('date')
print(df)
# sales
# date
# 2024-01-01 100
# 2024-01-02 200
# 2024-01-03 150
print(df.index) # Index(['2024-01-01', ...], dtype='object', name='date')การเลือกแถวด้วยดัชนีแบบกำหนดเอง
เมื่อคอลัมน์ที่มีความหมายถูกใช้เป็นดัชนีแล้ว คุณสามารถใช้ .loc[label] เพื่อดึงแถวตามป้ายกำกับด้วยรูปแบบคำสั่งที่อ่านง่าย โดยไม่ต้องใช้หน้ากากบูลีน สำหรับ DatetimeIndex คุณยังสามารถใช้สตริงวันที่บางส่วน เช่น df.loc['2024-01'] เพื่อเลือกแถวทั้งหมดในเดือนมกราคม 2024 ได้
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C'],
'price': [10, 20, 30],
'stock': [100, 50, 75]
})
df = df.set_index('product')
# Access row by label
print(df.loc['B'])
# price 20
# stock 50
# Name: B, dtype: int64set_index() กับหลายคอลัมน์ — MultiIndex
การส่งรายการชื่อคอลัมน์ให้กับ set_index() จะสร้าง MultiIndex (ดัชนีแบบลำดับชั้น) คุณสามารถเข้าถึง DataFrame ที่ได้โดยใช้ทูเพิลใน .loc[] MultiIndex จำเป็นสำหรับอนุกรมเวลาที่จัดกลุ่ม (ภูมิภาค + วันที่) ข้อมูลแบบแผง (หัวข้อ + เวลา) และการวิเคราะห์ใด ๆ ที่ต้องจัดกลุ่มแถวสองระดับ
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'East', 'West', 'West'],
'year': [2023, 2024, 2023, 2024],
'revenue': [100, 150, 200, 220]
})
df = df.set_index(['region', 'year'])
print(df)
# revenue
# region year
# East 2023 100
# 2024 150
# West 2023 200
# 2024 220
print(df.loc[('East', 2024)]) # revenue = 150พารามิเตอร์ drop= ใน set_index()
โดยค่าเริ่มต้น set_index('col') จะนำคอลัมน์ออกจากคอลัมน์ปกติของ DataFrame เมื่อคอลัมน์นั้นกลายเป็นดัชนีแล้ว ให้ส่งค่า drop=False เพื่อเก็บคอลัมน์ไว้ตามเดิมขณะเดียวกันก็ใช้คอลัมน์นั้นเป็นดัชนีด้วย วิธีนี้มีประโยชน์ในบางกรณีเมื่อต้องการเข้าถึงข้อมูลตามป้ายกำกับ แต่ยังต้องใช้คอลัมน์ดังกล่าวในการคำนวณในส่วนคอลัมน์ปกติ
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})
# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
# id value
# id
# 1 1 10
# 2 2 20
# 3 3 30reset_index() — ย้ายดัชนีกลับไปเป็นคอลัมน์
reset_index() เป็นการทำงานย้อนกลับของ set_index() โดยจะย้ายดัชนีแถวปัจจุบันกลับไปเป็นคอลัมน์ปกติ และแทนที่ดัชนีด้วย RangeIndex เริ่มต้น วิธีนี้มักจำเป็นหลังใช้ groupby().agg() หรือหลังการดำเนินการที่ทำให้มีดัชนีที่มีความหมาย ซึ่งต้องนำไปใช้เป็นคอลัมน์ในขั้นตอนประมวลผลต่อไป
import pandas as pd
df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'
reset = df.reset_index()
print(reset)
# region sales
# 0 East 100
# 1 West 200
print(reset.index.tolist()) # [0, 1] — default RangeIndex restoredreset_index(drop=True)
การส่งค่า drop=True ให้กับ reset_index() จะทิ้งดัชนีปัจจุบันทั้งหมด แทนที่จะย้ายไปเป็นคอลัมน์ ใช้ตัวเลือกนี้เมื่อดัชนีปัจจุบันไม่มีข้อมูลที่มีความหมาย (เช่น หลังกรองแถวแล้ว ดัชนีมีช่องว่างเป็น 0, 3, 7) และคุณต้องการเพียงดัชนีลำดับต่อเนื่องที่เริ่มจาก 0
import pandas as pd
df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist()) # [1, 2, 3, 4]
# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist()) # [0, 1, 2, 3]reset_index() หลัง groupby
หลังเรียกใช้ groupby().agg() คีย์ของกลุ่มจะกลายเป็นดัชนี การเรียกใช้ reset_index() จะเปลี่ยนคีย์เหล่านั้นกลับเป็นคอลัมน์ปกติ ทำให้ได้ผลลัพธ์แบบตารางแบนที่ทำงานต่อ รวมข้อมูล หรือส่งออกได้ง่ายขึ้น นี่เป็นหนึ่งในการใช้งาน reset_index() ที่พบบ่อยที่สุดในทางปฏิบัติ
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
'salary': [90000, 50000, 80000, 70000, 55000]
})
# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index
# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)rename_axis() สำหรับชื่อดัชนี
เมื่อดัชนีแถวไม่มีชื่อ หรือเมื่อคุณต้องการเปลี่ยนชื่อเพื่อให้ชัดเจน ให้ใช้ df.rename_axis('new_name') (สำหรับดัชนีแถว) หรือ df.rename_axis('col_name', axis=1) (สำหรับแกนคอลัมน์) การตั้งชื่อดัชนีที่มีความหมายช่วยให้ผลลัพธ์อธิบายตัวเองได้มากขึ้น โดยเฉพาะเมื่อส่งออกเป็น CSV ซึ่งชื่อดัชนีจะกลายเป็นหัวคอลัมน์
import pandas as pd
df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name) # None
# Name the index
df = df.rename_axis('region')
print(df)
# sales
# region
# A 100
# B 200
# C 300การจัดดัชนีใหม่เพื่อเติมช่องว่าง
DataFrame.reindex(new_index) จะปรับรูปร่าง DataFrame ให้ตรงกับดัชนีใหม่ โดยเติม NaN ลงในตำแหน่งที่มีอยู่ในดัชนีใหม่แต่ไม่มีในข้อมูลเดิม วิธีนี้ใช้สำหรับจัดแนว DataFrames ให้ตรงกับดัชนีสมบูรณ์เดียวกัน เช่น ตรวจสอบให้แน่ใจว่าทุกเดือนในปีปรากฏขึ้น แม้บางเดือนจะไม่มีข้อมูลก็ตาม
import pandas as pd
df = pd.DataFrame({
'month': ['Jan', 'Mar', 'Jun'],
'revenue': [100, 200, 300]
}).set_index('month')
all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
# revenue
# Jan 100.0
# Feb NaN <- filled with NaN
# Mar 200.0
# Apr NaN
# May NaN
# Jun 300.0MultiIndex reset_index และการเลือกระดับ
สำหรับ DataFrame ที่มี MultiIndex reset_index() จะย้ายทุกระดับกลับไปเป็นคอลัมน์โดยค่าเริ่มต้น ให้ส่งค่า level= เพื่อรีเซ็ตเฉพาะระดับที่ระบุ วิธีนี้มีประโยชน์เมื่อต้องการเก็บระดับหนึ่งไว้เป็นดัชนี (เช่น เก็บวันที่ไว้เป็นดัชนี) และย้ายเฉพาะอีกระดับหนึ่งไปเป็นคอลัมน์
import pandas as pd
df = pd.DataFrame(
{'revenue': [100, 150, 200, 220]},
index=pd.MultiIndex.from_tuples(
[('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
names=['region', 'year']
)
)
# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
# year revenue
# region
# East 2023 100
# East 2024 150
# West 2023 200
# West 2024 220ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการกำหนดและการรีเซ็ตดัชนี
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า set_index('col') ยกระดับคอลัมน์ให้เป็นดัชนีแถวเพื่อเข้าถึงข้อมูลตามป้ายกำกับ การส่งรายการจะสร้าง MultiIndex และ reset_index() จะย้ายดัชนีกลับไปเป็นคอลัมน์ (ใช้ drop=True หากต้องการทิ้งดัชนีแทน) ใช้ reindex() เพื่อจัดแนวข้อมูลให้ตรงกับดัชนีเป้าหมายที่สมบูรณ์ โดยเติม NaN ลงในตำแหน่งที่ขาดหาย เทคนิคเหล่านี้เป็นพื้นฐานสำคัญสำหรับบทเรียน GroupBy และการผสานข้อมูลที่จะเรียนต่อไป
คำถามที่พบบ่อย
บทเรียน “การกำหนดและรีเซ็ตดัชนี” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดและรีเซ็ตดัชนี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดและรีเซ็ตดัชนี”
ยกระดับคอลัมน์ให้เป็นดัชนีแถวด้วย set_index() รีเซ็ตกลับด้วย reset_index() และทำความเข้าใจภาพรวมของ MultiIndex คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดและรีเซ็ตดัชนี” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียงลำดับตามค่าคอลัมน์
- การเรียงลำดับตามดัชนี
- การจัดอันดับค่า
- การกำหนดและรีเซ็ตดัชนี