我有这个数据帧:
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