Jawaban:
antara:
df['index1'] = df.index
atau .reset_index
,:
df.reset_index(level=0, inplace=True)
jadi, jika Anda memiliki bingkai multi-indeks dengan 3 level indeks, seperti:
>>> 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
dan Anda ingin mengubah level 1 ( tick
) dan 3 ( obs
) dalam indeks menjadi kolom, Anda harus melakukan:
>>> 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
df.reset_index(level=df.index.names, inplace=True)
satu dapat mengkonversi seluruh multiindex menjadi kolom
df.reset_index()
, yang memindahkan keseluruhan indeks ke dalam kolom (satu kolom per level) dan membuat indeks int dari 0 hingga len (df) -1
df['index1'] = df.index
mengembalikan peringatan: "Nilai berusaha ditetapkan pada salinan sepotong dari DataFrame." Gunakan fungsi df.assign (), seperti yang ditunjukkan di bawah ini.
Untuk memberikan kejelasan yang lebih, mari kita lihat DataFrame dengan dua level dalam indeksnya (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'))
The reset_index
metode, yang disebut dengan parameter default, mengkonversi semua tingkat indeks untuk kolom dan menggunakan sederhana RangeIndex
sebagai indeks baru.
df.reset_index()
Gunakan level
parameter untuk mengontrol level indeks mana yang dikonversi menjadi kolom. Jika memungkinkan, gunakan nama level, yang lebih eksplisit. Jika tidak ada nama level, Anda dapat merujuk ke setiap level dengan lokasi integernya, yang dimulai dari 0 dari luar. Anda dapat menggunakan nilai skalar di sini atau daftar semua indeks yang ingin Anda atur ulang.
df.reset_index(level='State') # same as df.reset_index(level=0)
Jika Anda ingin mempertahankan indeks dan mengubah indeks menjadi kolom, Anda dapat melakukan hal berikut:
# for a single level
df.assign(State=df.index.get_level_values('State'))
# for all levels
df.assign(**df.index.to_frame())
rename_axis
+ reset_index
Pertama-tama Anda dapat mengubah nama indeks menjadi label yang diinginkan, kemudian naik ke seri:
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
Ini juga berfungsi untuk MultiIndex
kerangka data:
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
Jika Anda ingin menggunakan reset_index
metode ini dan juga mempertahankan indeks yang ada, Anda harus menggunakan:
df.reset_index().set_index('index', drop=False)
atau untuk mengubahnya di tempat:
df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)
Sebagai contoh:
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
Dan jika Anda ingin menyingkirkan label indeks yang dapat Anda lakukan:
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
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
Cara yang sangat sederhana untuk melakukannya adalah dengan menggunakan metode reset_index (). Untuk kerangka data, gunakan kode di bawah ini:
df.reset_index(inplace=True)
Dengan cara ini, indeks akan menjadi kolom, dan dengan menggunakan inplace sebagai True, ini menjadi perubahan permanen.