旋转或融化 Pandas DataFrame

问题描述 投票:0回答:1

我有一个包含以下列的数据框:“系列名称”、“国家/地区名称”、“2000”、“20001”、...、“2018”。 在“系列名称”中,我有要分析的变量(例如“PBI”、“表面积”等)。因此,在“系列名称”中,我有重复的值(例如每个国家/地区的 PBI)。

Original DataFrame

系列名称 国家名称 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')

What I Tried

我也尝试过:

indicadores_clean_pv.melt(id_vars='Country Name', var_name='Year').groupby(['Country Name','Year']).agg({'Series Name':'first'}).reset_index()

但我无法将“系列名称”值放入列中

有人可以帮助我吗? 预先感谢!

python pandas dataframe pivot-table melt
1个回答
0
投票

您可以使用:

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
© www.soinside.com 2019 - 2024. All rights reserved.