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_name
de 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 RangeIndex
als nieuwe index.
df.reset_index()
Gebruik de parameter level
om 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 MultiIndex
dataframes:
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_index
wilt 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.