[英]From wide format to long format with MultiIndex in Pandas
我有一個帶有兩個 MultiIndexes 的數據框(我理解為“寬格式”),我想對其進行整形,以便第二個索引成為一個新列(我理解為“長格式”)。 有什么簡單的方法可以做到這一點嗎?
這是現在的數據框:
A = pd.DataFrame([[1, 2], [1, 2], [1, 2], [1, 2], [1, 2]],
columns=['h', 'k'], index=[1, 2, 3, 4, 5])
B = pd.DataFrame([[3, 4], [3, 4], [3, 4], [3, 4], [3, 4]],
columns=['h', 'k'], index=[1, 2, 3, 4, 5])
C = pd.DataFrame([[5, 6], [5, 6], [5, 6], [5, 6], [5, 6]],
columns=['h', 'k'], index=[1, 2, 3, 4, 5])
A.columns = pd.MultiIndex.from_product([['A'], A.columns])
B.columns = pd.MultiIndex.from_product([['B'], B.columns])
C.columns = pd.MultiIndex.from_product([['C'], C.columns])
ABC = pd.concat([A, B, C], axis = 1)
A B C
h k h k h k
1 1 2 3 4 5 6
2 1 2 3 4 5 6
3 1 2 3 4 5 6
4 1 2 3 4 5 6
5 1 2 3 4 5 6
這就是我想要實現的目標:
A B C new_col
1 1 3 5 h
2 1 3 5 h
3 1 3 5 h
4 1 3 5 h
5 1 3 5 h
1 2 4 6 k
2 2 4 6 k
3 2 4 6 k
4 2 4 6 k
5 2 4 6 k
(我希望能夠直接在數據框上執行此操作,而不必將其轉換為另一個對象,例如 numpy 數組,以避免性能下降)。
嘗試:
print(
ABC.stack(level=1)
.reset_index(1)
.rename(columns={"level_1": "new_col"})
.sort_values("new_col")
)
印刷:
new_col A B C
1 h 1 3 5
2 h 1 3 5
3 h 1 3 5
4 h 1 3 5
5 h 1 3 5
1 k 2 4 6
2 k 2 4 6
3 k 2 4 6
4 k 2 4 6
5 k 2 4 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.