簡體   English   中英

如何將一級 pandas MultiIndex 列轉換為獨立列?

[英]How do I convert one level of pandas MultiIndex column to a standalone column?

我有一個 dataframe 和一個 MultiIndex 列,它有兩個級別,如下所示:

import pandas as pd
df = pd.DataFrame(
    np.arange(16).reshape(4,4),
    columns=pd.MultiIndex.from_tuples(
        (("ID1", "Field1"), ("ID1", "Field2"), ("ID2", "Field1"), ("ID2", "Field2"),))
    )
df.insert(0, "Date", pd.bdate_range("2021-11-01", "2021-11-04"))
df
Date            ID1             ID2
                Field1  Field2  Field1  Field2
0   2021-11-01  0       1       2       3
1   2021-11-02  4       5       6       7
2   2021-11-03  8       9       10      11
3   2021-11-04  12      13      14      15

我正在嘗試將 MultiIndex 列的級別 0 轉換為另一個名為“ID”的列,以便 dataframe 看起來像這樣:

df1 = pd.DataFrame(
    np.arange(16).reshape(8,2),
    columns=["Field1", "Field2"]
)
df1.insert(0, "ID", ["ID1", "ID2"]*4)
df1.insert(0, "Date", pd.bdate_range("2021-11-01", "2021-11-04").repeat(2))
df1
    Date        ID      Field1  Field2
0   2021-11-01  ID1     0       1
1   2021-11-01  ID2     2       3
2   2021-11-02  ID1     4       5
3   2021-11-02  ID2     6       7
4   2021-11-03  ID1     8       9
5   2021-11-03  ID2     10      11
6   2021-11-04  ID1     12      13
7   2021-11-04  ID2     14      15

我嘗試使用熔體 function

df.melt(col_level=0, id_vars=["日期"])

但這會將 Field1 和 Field2 組合成一列,而不是根據需要將它們作為單獨的列。

任何建議,將不勝感激。 謝謝!

您可以嘗試以下方法:

out = (df
       .set_index('Date')
       .stack(level=0)
       .reset_index()
       .rename({'level_1': 'ID'}, axis=1))
print(out)

它給:

        Date   ID  Field1  Field2
0 2021-11-01  ID1       0       1
1 2021-11-01  ID2       2       3
2 2021-11-02  ID1       4       5
3 2021-11-02  ID2       6       7
4 2021-11-03  ID1       8       9
5 2021-11-03  ID2      10      11
6 2021-11-04  ID1      12      13
7 2021-11-04  ID2      14      15

這是另一種方式:

df = pd.pivot(df.melt(id_vars=['Date'], var_name=['ID','Fields']),index=['Date','ID'],columns='Fields', values='value').reset_index()

print(df)

output:

Fields       Date   ID  Field1  Field2
0      2021-11-01  ID1       0       1
1      2021-11-01  ID2       2       3
2      2021-11-02  ID1       4       5
3      2021-11-02  ID2       6       7
4      2021-11-03  ID1       8       9
5      2021-11-03  ID2      10      11
6      2021-11-04  ID1      12      13
7      2021-11-04  ID2      14      15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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