Hoe index van een Pandas-dataframe converteren in een kolom

Dit lijkt nogal voor de hand liggend, maar ik kan er niet achter komen hoe een index van gegevensframe naar een kolom converteert?

Bijvoorbeeld:

df=
        gi       ptt_loc
 0  384444683      593  
 1  384444684      594 
 2  384444686      596  

Naar,

df=
    index1    gi       ptt_loc
 0  0     384444683      593  
 1  1     384444684      594 
 2  2     384444686      596  

Antwoord 1, Autoriteit 100%

ook:

df['index1'] = df.index

of, .reset_index:

df.reset_index(level=0, inplace=True)

Dus, als u een multi-indexframe hebt met 3 niveaus van index, zoals:

>>> df
                       val
tick       tag obs        
2016-02-26 C   2    0.0139
2016-02-27 A   2    0.5577
2016-02-28 C   6    0.0303

en u wilt de 1e (tick) en 3RD (obs) Niveaus in de index in kolommen, doen, u zou doen:

>>> df.reset_index(level=['tick', 'obs'])
          tick  obs     val
tag                        
C   2016-02-26    2  0.0139
A   2016-02-27    2  0.5577
C   2016-02-28    6  0.0303

Antwoord 2, Autoriteit 4%

Voor multiindex kunt u zijn subindex extraheren met

df['si_name'] = R.index.get_level_values('si_name') 

waarbij si_namede naam van de subindex is.


Antwoord 3, autoriteit 4%

Laten we voor wat meer duidelijkheid kijken naar een DataFrame met twee niveaus in de index (een MultiIndex).

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
                                    ['North', 'South']], 
                                   names=['State', 'Direction'])
df = pd.DataFrame(index=index, 
                  data=np.random.randint(0, 10, (6,4)), 
                  columns=list('abcd'))

De methode reset_index, aangeroepen met de standaardparameters, converteert alle indexniveaus naar kolommen en gebruikt een eenvoudige RangeIndexals nieuwe index.

df.reset_index()

Gebruik de parameter levelom te bepalen welke indexniveaus worden omgezet in kolommen. Gebruik indien mogelijk de naam van het niveau, die explicieter is. Als er geen niveaunamen zijn, kunt u naar elk niveau verwijzen door de gehele locatie, die vanaf de buitenkant begint bij 0. U kunt hier een scalaire waarde gebruiken of een lijst met alle indexen die u wilt resetten.

df.reset_index(level='State') # same as df.reset_index(level=0)

In het zeldzame geval dat u de index wilt behouden en de index in een kolom wilt veranderen, kunt u het volgende doen:

# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())

Antwoord 4, autoriteit 3%

rename_axis+ reset_index

U kunt eerst uw index hernoemen naar een gewenst label, danverhogen tot een serie:

df = df.rename_axis('index1').reset_index()
print(df)
   index1         gi  ptt_loc
0       0  384444683      593
1       1  384444684      594
2       2  384444686      596

Dit werkt ook voor MultiIndexdataframes:

print(df)
#                        val
# tick       tag obs        
# 2016-02-26 C   2    0.0139
# 2016-02-27 A   2    0.5577
# 2016-02-28 C   6    0.0303
df = df.rename_axis(['index1', 'index2', 'index3']).reset_index()
print(df)
       index1 index2  index3     val
0  2016-02-26      C       2  0.0139
1  2016-02-27      A       2  0.5577
2  2016-02-28      C       6  0.0303

Antwoord 5

Als u de methode reset_indexwilt gebruiken en ook uw bestaande index wilt behouden, moet u het volgende gebruiken:

df.reset_index().set_index('index', drop=False)

of om het op zijn plaats te wijzigen:

df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)

Bijvoorbeeld:

print(df)
          gi  ptt_loc
0  384444683      593
4  384444684      594
9  384444686      596
print(df.reset_index())
   index         gi  ptt_loc
0      0  384444683      593
1      4  384444684      594
2      9  384444686      596
print(df.reset_index().set_index('index', drop=False))
       index         gi  ptt_loc
index
0          0  384444683      593
4          4  384444684      594
9          9  384444686      596

En als u het indexlabel kwijt wilt raken, kunt u doen:

df2 = df.reset_index().set_index('index', drop=False)
df2.index.name = None
print(df2)
   index         gi  ptt_loc
0      0  384444683      593
4      4  384444684      594
9      9  384444686      596

Antwoord 6

df1 = pd.DataFrame({"gi":[232,66,34,43],"ptt":[342,56,662,123]})
p = df1.index.values
df1.insert( 0, column="new",value = p)
df1
    new     gi     ptt
0    0      232    342
1    1      66     56 
2    2      34     662
3    3      43     123

Antwoord 7

Dit zou de truc (indien niet multilevel-indexering) moeten doen)

df.reset_index().rename({'index':'index1'}, axis = 'columns')

En natuurlijk kunt u INPLAATS = TRUE altijd instellen, als u dit niet wilt toewijzen aan een nieuwe variabele in de functie Parameter van Hernoem.


Antwoord 8

Een zeer eenvoudige manier om dit te doen, is om reset_index () methode te gebruiken. Voor een DF van het gegevensframe gebruiken DF de onderstaande code:

df.reset_index(inplace=True)

Op deze manier wordt de index een kolom en met behulp van inmaag als waar, wordt dit permanente verandering.

Other episodes