Pandas dataframe использует столбцы в качестве строк (плавление) - PullRequest
0 голосов
/ 04 января 2019

Я знаю, что эти вопросы задавались несколько раз, но мне не удалось построить свое решение на основе уже заданных.

DF У меня есть:

id| country  |  series name   | 2015 | 2016 | 2017
--+----------+----------------+------+------+------
0 | saudi    | fertility rate | 1    | 2    | 2   |    
1 | saudi    | CO2 emissions  | 5    | 10   | 15  | 
2 | pakistan | fertility rate | 1    | 2    | 1   |
3 | pakistan | CO2 emissions  | NaN  | NaN  | NaN |

DF Я хочу:

id| country  | year | fertility rate | CO2 emissions 
--+----------+------+----------------+---------
0 | saudi    | 2015 |       1        |    5      
1 | saudi    | 2016 |       2        |    10      
2 | saudi    | 2017 |       2        |    15      
3 | pakistan | 2015 |       1        |    NaN
4 | pakistan | 2016 |       2        |    NaN
5 | pakistan | 2017 |       1        |    NaN

Я перепробовал несколько разных конфигураций расплава, но почему-то мне не удалось решить эту проблему.

1 Ответ

0 голосов
/ 04 января 2019

IIUC melt + pivot_table. Этот ответ предполагает, что id является вашим индексом. Если это не так, просто отбросьте его, так как в расчете это не требуется.


d = df.melt(id_vars=["country", "series name"], var_name="year")

d.pivot_table(
    index=["country", "year"], columns="series name", values="value"
).reset_index()

series name   country  year  CO2 emissions  fertility rate
0            pakistan  2015            NaN             1.0
1            pakistan  2016            NaN             2.0
2            pakistan  2017            NaN             1.0
3               saudi  2015            5.0             1.0
4               saudi  2016           10.0             2.0
5               saudi  2017           15.0             2.0
...