Pandas & NumPy Academy · Lektion

Ange och återställ index

Gör en kolumn till radindex med set_index(), återställ det med reset_index() och få en översikt över MultiIndex.

Lektion 4 av 413 steg

Ange och återställ index är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad är DataFrame-indexet?

Varje Pandas DataFrame har ett radindex — en uppsättning etiketter som hör till varje rad. Standardindexet är ett RangeIndex (0, 1, 2, …), men ni kan ersätta det med valfri kolumn som fungerar som en naturlig identifierare: ett datum, ett produkt-ID, ett användar-ID eller en unik nyckel. Ett meningsfullt index förbättrar läsbarheten, möjliggör etikettbaserade utsnitt och krävs för omsampling av tidsserier.

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() — göra en kolumn till index

DataFrame.set_index('col') gör den angivna kolumnen till radindex och tar bort den från de vanliga kolumnerna. Kolumnens värden blir radetiketter. Detta är det vanliga sättet att göra en DataFrame mer uttrycksfull när en kolumn fungerar som en naturlig nyckel. En ny DataFrame returneras; originalet ändras inte om ni inte använder 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')

Välja rader med ett anpassat index

När en meningsfull kolumn är index kan ni använda .loc[label] för att hämta rader efter etikett med en tydlig och lättläst syntax — utan booleska masker. För ett DatetimeIndex kan ni även använda ofullständiga datumsträngar, som df.loc['2024-01'], för att välja alla rader i januari 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() med flera kolumner — MultiIndex

Om ni skickar en lista med kolumnnamn till set_index() skapas ett MultiIndex (hierarkiskt index). Den resulterande DataFrame kan nås med tupler i .loc[]. MultiIndex är nödvändigt för grupperade tidsserier (region + datum), paneldata (objekt + tid) och all analys som kräver gruppering av rader på två nivåer.

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

Parametern drop= i set_index()

Som standard tar set_index('col') bort kolumnen från DataFrames vanliga kolumner när den blir index. Ange drop=False för att behålla kolumnen samtidigt som den används som index. Detta är ibland användbart när ni vill ha etikettbaserad åtkomst men även behöver kolumnen för beräkningar bland de vanliga kolumnerna.

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() — flytta tillbaka indexet till en kolumn

reset_index() är motsatsen till set_index(): den flyttar det aktuella radindexet tillbaka till en vanlig kolumn och ersätter indexet med standardindexet RangeIndex. Detta behövs ofta efter en groupby().agg() eller efter operationer som lämnar er med ett meningsfullt index som ni behöver använda som kolumn i den fortsatta bearbetningen.

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)

Om ni skickar drop=True till reset_index() tas det aktuella indexet bort helt i stället för att flyttas till en kolumn. Använd detta när det aktuella indexet inte innehåller någon meningsfull information (till exempel efter filtrering, när indexet har luckor som 0, 3, 7) och ni bara vill ha ett rent sekventiellt index som börjar på 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() efter groupby

Efter att ni har anropat groupby().agg() blir groupby-nycklarna index. Om ni anropar reset_index() omvandlas de tillbaka till vanliga kolumner, vilket ger ett platt tabellresultat som är enklare att arbeta med, slå samman eller exportera. Detta är en av de vanligaste användningarna av reset_index() i praktiken.

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() för indexnamn

När radindexet saknar namn, eller när ni vill byta namn på det för tydlighetens skull, använder ni df.rename_axis('new_name') (för radindexet) eller df.rename_axis('col_name', axis=1) (för kolumnaxeln). Ett meningsfullt indexnamn gör resultatet mer självförklarande, särskilt vid export till CSV där indexnamnet blir en kolumnrubrik.

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

Indexera om för att fylla luckor

DataFrame.reindex(new_index) formar om DataFrame så att den matchar ett nytt index och fyller positioner som finns i det nya indexet men inte i originaldata med NaN. Detta används för att anpassa DataFrames till ett gemensamt komplett index — till exempel för att säkerställa att varje månad under ett år visas även om det saknas data för vissa månader.

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 och val av nivå

För en MultiIndex-DataFrame flyttar reset_index() som standard tillbaka alla nivåer till kolumner. Ange level= för att bara återställa specifika nivåer. Detta är användbart när ni vill behålla en nivå som index (till exempel datumet) och bara flytta den andra nivån till en kolumn.

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

Snabbtest

Testa er förståelse av hur man anger och återställer indexet.

Lektionssammanfattning

I den här lektionen har ni lärt er att set_index('col') gör en kolumn till radindex för etikettbaserad åtkomst, att en lista skapar ett MultiIndex och att reset_index() flyttar tillbaka indexet till en kolumn (använd drop=True för att ta bort det i stället). Använd reindex() för att anpassa till ett komplett målindex och fylla saknade positioner med NaN. Dessa tekniker är grundläggande för de kommande lektionerna om GroupBy och sammanslagning.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Ange och återställ index” gratis?

Ja – hela texten till ”Ange och återställ index” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Ange och återställ index”?

Gör en kolumn till radindex med set_index(), återställ det med reset_index() och få en översikt över MultiIndex. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Ange och återställ index”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Sortera efter kolumnvärden
  2. Sortera efter index
  3. Rangordna värden
  4. Ange och återställ index
← Tillbaka till Pandas & NumPy Academy