Tôi nghĩ câu trả lời ngắn gọn là NO. Để có cột nhiều chỉ mục, khung dữ liệu phải có hai (hoặc nhiều) hàng được chuyển đổi thành tiêu đề (như cột cho hàng nhiều hàng). Nếu bạn có loại khung dữ liệu này, việc tạo tiêu đề nhiều chỉ mục không quá khó. Nó có thể được thực hiện trong một dòng rất dài mã, và bạn có thể tái sử dụng nó ở bất kỳ dataframe khác, chỉ số dòng của tiêu đề nên được giữ trong tâm trí & thay đổi nếu khác:
df = pd.DataFrame({'a':['foo_0', 'bar_0', 1, 2, 3], 'b':['foo_0', 'bar_1', 11, 12, 13],
'c':['foo_1', 'bar_0', 21, 22, 23], 'd':['foo_1', 'bar_1', 31, 32, 33]})
Các dataframe:
a b c d
0 foo_0 foo_0 foo_1 foo_1
1 bar_0 bar_1 bar_0 bar_1
2 1 11 21 31
3 2 12 22 32
4 3 13 23 33
Tạo đối tượng đa-index:
arrays = [df.iloc[0].tolist(), df.iloc[1].tolist()]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df.columns = index
multi-index kết quả tiêu đề:
first foo_0 foo_1
second bar_0 bar_1 bar_0 bar_1
0 foo_0 foo_0 foo_1 foo_1
1 bar_0 bar_1 bar_0 bar_1
2 1 11 21 31
3 2 12 22 32
4 3 13 23 33
Cuối cùng chúng ta cần phải thả 0-1 hàng sau đó đặt lại chỉ mục hàng:
df = df.iloc[2:].reset_index(drop=True)
Phiên bản "một dòng" (chỉ có điều bạn phải thay đổi là để xác định chỉ số tiêu đề và dataframe bản thân):
idx_first_header = 0
idx_second_header = 1
df.columns = pd.MultiIndex.from_tuples(list(zip(*[df.iloc[idx_first_header].tolist(),
df.iloc[idx_second_header].tolist()])), names=['first', 'second'])
df = df.drop([idx_first_header, idx_second_header], axis=0).reset_index(drop=True)
Dường như a.pivot (index = 'one', cột = 'hai', giá trị = 'ba') là nhận được gần hơn với những gì tôi muốn (trích xuất thông tin từ df và biến chúng thành cột), mặc dù tôi đã không hoàn toàn tìm ra cách để làm cho đa chỉ số. – sheridp
Tôi không nghĩ rằng bạn muốn "đặt nhiều chỉ mục trên cột", tôi nghĩ bạn muốn đặt nó trên hàng, sau đó chuyển hàng sang cột? Vui lòng chỉnh sửa câu hỏi của bạn để rõ ràng hơn – smci