使用pandas从行创建一组列

2024-05-15 09:39:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,当前看起来像这样:

   Year  Country Subject Descriptor  GDP
0  2015  Austria                  r  344.2
1  2015  Austria                  n  344.2
2  2015  Austria                  d  100
3  2015  Austria                  u  5.742
4  2015  Belgium                  r  416.7
5  2015  Belgium                  n  416.7
6  2015  Belgium                  d  100
7  2015  Belgium                  u  8.483

我想将其转换为以下线条:

   Year  Country GDP_R GDP_N GDP_D GDP_U
   2015  Austria 344.2 344.2 100   5.742
   2015  Belgium 416.7 416.7 100   8.483

到目前为止,我已经尝试使用熔化和堆叠,但我觉得我只是错过了它,如果你能在这里帮助我,将不胜感激

谢谢大家!


Tags: 数据yearcountry线条subjectdescriptorgdpbelgium
2条回答

在这种情况下,可以使用轴:

 (df.pivot(['Year', 'Country'], 'Subject_Descriptor', 'GDP')
    .rename(columns = lambda col: f"GDP_{col.upper()}")
    .rename_axis(columns=None).reset_index()
  )
 
   Year  Country  GDP_D  GDP_N  GDP_R  GDP_U
0  2015  Austria  100.0  344.2  344.2  5.742
1  2015  Belgium  100.0  416.7  416.7  8.483

首先可以在['Year', 'Country']上使用groupby,然后可以将每个组的GDP转换为列表,然后将它们转换为列。最后几个步骤是重命名列、重置索引和删除列轴名称

(
    df.groupby(['Year', 'Country'])
    .apply(lambda x: pd.Series(x.GDP.tolist(), index=x['Subject Descriptor']))
    .rename(columns = lambda x: f'GDP_{x.upper()}')
    .reset_index()
    .rename_axis('', axis=1)
)

相关问题 更多 >