Câu trả lời:
hoặc:
df['index1'] = df.index
hoặc .reset_index
:
df.reset_index(level=0, inplace=True)
vì vậy, nếu bạn có khung đa chỉ mục với 3 cấp chỉ mục, như:
>>> 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
và bạn muốn chuyển đổi các cấp 1 ( tick
) và 3 ( obs
) trong chỉ mục thành các cột, bạn sẽ làm:
>>> 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)
một người có thể chuyển đổi toàn bộ đa điểm thành các cột
df.reset_index()
, nó sẽ di chuyển toàn bộ chỉ mục vào các cột (một cột trên mỗi cấp) và tạo một chỉ mục int từ 0 đến len (df) -1
df['index1'] = df.index
trả về một cảnh báo: "Một giá trị đang cố gắng được đặt trên một bản sao của một lát cắt từ DataFrame." Sử dụng hàm df.assign () thay vào đó, như hiển thị bên dưới.
Để cung cấp rõ ràng hơn một chút, chúng ta hãy xem DataFrame với hai cấp độ trong chỉ mục của nó (Multi Index).
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'))
Các reset_index
phương pháp, được gọi với các thông số mặc định, chuyển đổi tất cả các cấp chỉ số vào các cột và sử dụng một cách đơn giản RangeIndex
như chỉ số mới.
df.reset_index()
Sử dụng level
tham số để kiểm soát mức chỉ số nào được chuyển đổi thành cột. Nếu có thể, sử dụng tên cấp độ, rõ ràng hơn. Nếu không có tên cấp, bạn có thể tham chiếu từng cấp theo vị trí số nguyên của nó, bắt đầu từ 0 từ bên ngoài. Bạn có thể sử dụng giá trị vô hướng ở đây hoặc danh sách tất cả các chỉ mục bạn muốn đặt lại.
df.reset_index(level='State') # same as df.reset_index(level=0)
Trong trường hợp hiếm hoi mà bạn muốn bảo toàn chỉ mục và biến chỉ mục thành một cột, bạn có thể thực hiện như sau:
# 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
Trước tiên, bạn có thể đổi tên chỉ mục của mình thành nhãn mong muốn, sau đó nâng lên thành một chuỗi:
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
Điều này cũng hoạt động cho 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
Nếu bạn muốn sử dụng reset_index
phương thức và cũng bảo toàn chỉ mục hiện tại của mình, bạn nên sử dụng:
df.reset_index().set_index('index', drop=False)
hoặc để thay đổi nó tại chỗ:
df.reset_index(inplace=True)
df.set_index('index', drop=False, inplace=True)
Ví dụ:
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
Và nếu bạn muốn thoát khỏi nhãn chỉ mục, bạn có thể làm:
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
Một cách rất đơn giản để làm điều này là sử dụng phương thức reset_index (). Đối với khung dữ liệu df sử dụng mã dưới đây:
df.reset_index(inplace=True)
Bằng cách này, chỉ mục sẽ trở thành một cột và bằng cách sử dụng inplace là True, điều này trở thành thay đổi vĩnh viễn.