获取多索引数据框架中的列名称作为索引



我有这个数据帧:

Abacate    Abóbora (inclui butternut)  Alface  Alho    
Region  years                                                                                   
PT      1986     NaN            NaN                      NaN    NaN 
1987     NaN            NaN                      NaN    NaN 
1988     NaN            NaN                      NaN    NaN 
1989     NaN            NaN                      NaN    NaN 
1990     NaN            NaN                      NaN    NaN 
...      ...     ...            ...                      ...    ... 
3       2017     NaN            NaN                      NaN    NaN 
2018     NaN            NaN                      NaN    NaN 
2019     50.0           NaN                      NaN    NaN 
2020     50.0           NaN                      NaN    NaN 
2021     50.0           NaN                      NaN    NaN 
324 rows × 95 columns

我如何用3个索引来做这个数据框架,即,如何将所有列名作为第三个索引传递,如下所示:


Region  years   Products                        Productivity                                                        
PT      1986    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN
1987    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN                                
1988    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN                                       
1989    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN          
1990    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN          
...      ...     ...            ...                      ...    ... 
3       2017    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN           
2018    Abacate                           NaN
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN 
2019    Abacate                           50.0
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN 
2020    Abacate                           50.0
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN 
2021    Abacate                           50.0
Abóbora (inclui butternut)        NaN
Alface                            NaN
Alho                              NaN  

由于我有更多的专栏比我在这里写的,我尝试做一个"for"函数运行所有列,然后与其他索引合并,但它不起作用。

您正在寻找堆栈:

df = df.stack().to_frame().rename(columns={0:"Productivity"})

完整的示例:

df = pd.DataFrame(data=[["PT","1986","NaN","NaN","NaN","NaN"],["PT","1987","NaN","NaN","NaN","NaN"],["PT","1988","NaN","NaN","NaN","NaN"],["PT","1989","NaN","NaN","NaN","NaN"],["PT","1990","NaN","NaN","NaN","NaN"],["3","2017","NaN","NaN","NaN","NaN"],["3","2018","NaN","NaN","NaN","NaN"],["3","2019","50.0","NaN","NaN","NaN"],["3","2020","50.0","NaN","NaN","NaN"],["3","2021","50.0","NaN","NaN","NaN"]], columns=["Region","years","Abacate","Abóbora (inclui butternut)","Alface","Alho"])
df = df.groupby(["Region", "years"]).agg(Abacate=("Abacate","sum"), Abóbora=("Abóbora (inclui butternut)","sum"), Alface=("Alface","sum"), Alho=("Alho","sum"))
df = df.rename_axis("Products", axis="columns")
df = df.stack().to_frame().rename(columns={0:"Productivity"})
输出:

Productivity
Region years Products             
3      2017  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
2018  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
2019  Abacate          50.0
Abóbora           NaN
Alface            NaN
Alho              NaN
2020  Abacate          50.0
Abóbora           NaN
Alface            NaN
Alho              NaN
2021  Abacate          50.0
Abóbora           NaN
Alface            NaN
Alho              NaN
PT     1986  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
1987  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
1988  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
1989  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN
1990  Abacate           NaN
Abóbora           NaN
Alface            NaN
Alho              NaN

最新更新