0Pricing
Pandas & NumPy Academy · บทเรียน

การกำหนดและรีเซ็ตดัชนี

ยกระดับคอลัมน์ให้เป็นดัชนีแถวด้วย 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: int64

set_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     30

reset_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 restored

reset_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.0

MultiIndex 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเรียงลำดับตามค่าคอลัมน์
  2. การเรียงลำดับตามดัชนี
  3. การจัดอันดับค่า
  4. การกำหนดและรีเซ็ตดัชนี
← กลับไปที่ Pandas & NumPy Academy