如何在不丢失列的情况下将列(类别类型)转换为列?

时间:2019-07-23 08:52:05

标签: python pandas dataframe pivot

我有一个包含许多列的数据框。我想将类别类型列(“系列名称”)中的值转换为列,而不会丢失其他列。 在下面,您可以看到我的工作:

我有这个 enter image description here

我使用以下代码:

education_level.pivot(index=education_level.index, columns='Series Name')['Value']

结果是:enter image description here

因此,我丢失了“国家名称”,“国家代码”和“年份”列。我不想要那个。我希望有人可以帮助我解决这个问题。

我想得到以下最终结果: 国家/地区名称-国家/地区代码-年份-1类-2类-... 意思是,我想连续获取一个国家/地区一年的数据。

2 个答案:

答案 0 :(得分:1)

如果cols列表中所有值的排序规则都是唯一的,请将set_indexunstack结合使用:

cols = ['Country name','Country Code','Year','Series Name']
df = education_level.set_index(cols)['Value'].unstack()

如果没有,请结合使用pivot_table和汇总功能-例如mean

df1 = df.pivot_table(index=['Country name','Country Code','Year'],
                     columns='Series Name',
                     values='Value',
                     aggfunc='mean')

答案 1 :(得分:0)

首先,必须创建一个数据透视表:

education_level= education_level.pivot_table(index=['Country Name','Country Code','Year'],
                     columns='Series Name',
                     values='Value',
                     aggfunc='mean')

然后,由于不需要多索引,因此我创建了类别,然后重置了索引:

education_level.columns = education_level.columns.add_categories(['Country Name','Country Code','Year'])
education_level.columns = pd.Index(list(education_level.columns))
education_level.reset_index(level=education_level.index.names, inplace = True)