我有一个 csv 格式的表格,如下所示。我想转置该表格,以便指标列中的值成为新列。
Indicator Country Year Value 1 Angola 2005 6 2 Angola 2005 13 3 Angola 2005 10 4 Angola 2005 11 5 Angola 2005 5 1 Angola 2006 3 2 Angola 2006 2 3 Angola 2006 7 4 Angola 2006 3 5 Angola 2006 6
我希望最终结果看起来是这样的:
Country Year 1 2 3 4 5 Angola 2005 6 13 10 11 5 Angola 2006 3 2 7 3 6
我曾尝试使用熊猫数据框,但没有成功。
print(df.pivot(columns = 'Country', 'Year', 'Indicator', values = 'Value'))
对于如何实现这一目标您有什么想法吗?
你可以.pivot像这样使用:
.pivot
out = df.pivot(index=['Country', 'Year'], columns='Indicator', values='Value') print(out) Indicator 1 2 3 4 5 Country Year Angola 2005 6 13 10 11 5 2006 3 2 7 3 6
要压缩回平面表,请使用.rename_axis删除“指标”并将.reset_index国家和年份转换回正常列。
.rename_axis
.reset_index
print(out.rename_axis(columns=None).reset_index()) Country Year 1 2 3 4 5 0 Angola 2005 6 13 10 11 5 1 Angola 2006 3 2 7 3 6
.pivot_table
如果您的完整数据有重复的标签组合(国家、年份、指标),则可以使用.pivot_table。它默认取平均值。
out = df.pivot_table( index=['Country', 'Year'], columns='Indicator', values='Value') print(out.rename_axis(columns=None).reset_index()) Country Year 1 2 3 4 5 0 Angola 2005 6.0 13.0 10.0 11.0 5.0 1 Angola 2006 3.0 2.0 7.0 3.0 6.0