我有一个包含以下列的数据框:“系列名称”、“国家/地区名称”、“2000”、“20001”、...、“2018”。 在“系列名称”中,我有要分析的变量(例如“PBI”、“表面积”等)。因此,在“系列名称”中,我有重复的值(例如每个国家/地区的 PBI)。
系列名称 | 国家名称 | 2000 [2000 年] | 2001 年 [2001 年] |
---|---|---|---|
Superficie(公里 cuadrados) | 统一国家 | 9632030 | 9632030 |
Superficie(公里 cuadrados) | 欧洲联盟 | 4384964,995 | 4384984,995 |
Superficie(公里 cuadrados) | 日本 | 377800 | 377880 |
我想以这种方式重新排序 DataFrame: - 列:“国家/地区名称”、“年份”以及“系列名称”的所有唯一值 - 年份列:取每个国家从 2000 年到 2018 年的值 -“系列名称”列:每列(“PBI”、“表面”等)都有各自的值 年份和国家/地区。
国家名称 | 年份 | Superficie(公里 cuadrados) |
---|---|---|
统一国家 | 2000 | 9632030 |
统一国家 | 2001 | 9632030 |
欧洲联盟 | 2000 | 4384964,995 |
欧洲联盟 | 2001 | 4384964,995 |
日本 | 2000 | 377800 |
日本 | 2001 | 377800 |
我尝试过melt,但我真的不知道如何使用它:
indicadores_clean_pv = pd.melt(indicadores_clean, id_vars=['Country Name'], var_name='Año')
我也尝试过:
indicadores_clean_pv.melt(id_vars='Country Name', var_name='Year').groupby(['Country Name','Year']).agg({'Series Name':'first'}).reset_index()
但我无法将“系列名称”值放入列中
有人可以帮助我吗? 预先感谢!
您可以使用:
out = (df.melt(id_vars=['Series Name', 'Country Name'], var_name='Year')
.pivot_table(index=['Country Name', 'Year'], columns='Series Name',
values='value', aggfunc='first')
.reset_index().rename_axis(columns=None)
.assign(Year=lambda x: x['Year'].str.split().str[0]))
输出:
>>> out
Country Name Year Superficie (kilómetros cuadrados)
0 Estados Unidos 2000 9632030
1 Estados Unidos 2001 9632030
2 Japón 2000 377800
3 Japón 2001 377880
4 Unión Europea 2000 4384964,995
5 Unión Europea 2001 4384984,995