Tôi bắt đầu với DataFrame
sau:Pandas: cách tối ưu để cột MultiIndex
df_1 = DataFrame({
"Cat1" : ["a", "b"],
"Vals1" : [1,2] ,
"Vals2" : [3,4]
})
df
Tôi muốn làm cho nó trông như thế này:
Và tôi có thể làm điều đó, với mã này:
df_2 = (
pd.melt(df_1, id_vars=["Cat1"])
.T
)
df_2.columns = (
pd.MultiIndex
.from_tuples(
list(zip(df_2.loc["Cat1", :] , df_2.loc["variable", :])) ,
names=["Cat1", None]
)
)
df_2 = (
df_2
.loc[["value"], :]
.reset_index(drop=True)
.sortlevel(0, axis=1)
)
df_2
Nhưng có rất nhiều bước ở đây mà tôi cảm thấy mùi mã, hoặc ít nhất là một cái gì đó mơ hồ không phải là gấu trúc thành ngữ, như thể tôi đang thiếu điểm của một cái gì đó trong API. Làm tương đương với chỉ mục dựa trên hàng chỉ là một bước, ví dụ: qua set_index()
. (Lưu ý rằng tôi biết rằng các cột tương đương với set_index()
is still an open issue). Có cách nào tốt hơn, chính thức hơn để thực hiện việc này không?
Tôi có thể cung cấp cho bạn một số lời khuyên không? Upvote câu hỏi đặc biệt là nếu OP nhận được sau khi upvote 15+ điểm của bạn - sau đó OP có thể upvote giải pháp của bạn;) – jezrael