我有一个包含许多列的数据框。我想将类别类型列(“系列名称”)中的值转换为列,而不会丢失其他列。 在下面,您可以看到我的工作:
我使用以下代码:
education_level.pivot(index=education_level.index, columns='Series Name')['Value']
因此,我丢失了“国家名称”,“国家代码”和“年份”列。我不想要那个。我希望有人可以帮助我解决这个问题。
我想得到以下最终结果: 国家/地区名称-国家/地区代码-年份-1类-2类-... 意思是,我想连续获取一个国家/地区一年的数据。
答案 0 :(得分:1)
如果cols
列表中所有值的排序规则都是唯一的,请将set_index
与unstack
结合使用:
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)