簡體   English   中英

在 Pandas 中使用 MultiIndex 從寬格式到長格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM