python pandas колонки
Есть такая таблица
| показатель | fact2020 | fact2021 | fact2022 | plan2023 |
|---|---|---|---|---|
| a | 143 | 24 | 124 | 324 |
| b | 234 | 1 | 324 | 6583 |
Хочу привести ее к следующему виду
| показатель | признак | год | значение |
|---|---|---|---|
| a | fact | 2020 | 143 |
| a | fact | 2021 | 24 |
| a | fact | 2022 | 124 |
| a | plan | 2023 | 324 |
| b | fact | 2020 | 234 |
| b | fact | 2021 | 1 |
| b | fact | 2022 | 324 |
| b | plan | 2023 | 6583 |
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно сделать так:
res = df.pivot(columns = "показатель", values = ["fact2020", "fact2021", "fact2022", "plan2023"]).T.reset_index()
res['признак'] = res['level_0'].str[:-4]
res['год'] = res['level_0'].str[-4:]
res["значение"] = res[0].fillna(res[1])
res = res.drop(columns=["level_0", 0, 1]).sort_values("показатель")
res:
показатель признак год значение
0 a fact 2020 143.0
2 a fact 2021 24.0
4 a fact 2022 124.0
6 a plan 2023 324.0
1 b fact 2020 234.0
3 b fact 2021 1.0
5 b fact 2022 324.0
7 b plan 2023 6583.0