如何在Pandas中对数据框进行透视?

55

我有一个以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

我尝试使用pandas数据框架,但效果不佳。

print(df.pivot(columns = 'Country', 'Year', 'Indicator', values = 'Value'))

你有关于如何完成这个任务的想法吗?


@alfasin 他可能正在展示表格数据给我们看。不过我猜测如果他正在使用pandas dataframe,那么他一定已经将其解析为表格了。 - Adam Smith
你的数据框目前是什么样子?当你调用pivot时,它会做什么,你称之为“没有太大的成功”? - Adam Smith
2
我在这个Q&A中提供了几个详细的示例和替代方法,你或其他人可能会发现有帮助。 - piRSquared
2个回答

98

你可以使用 pivot_table

pd.pivot_table(df, values = 'Value', index=['Country','Year'], columns = 'Indicator').reset_index()

这将输出:

 Indicator  Country     Year    1   2   3   4   5
 0          Angola      2005    6   13  10  11  5
 1          Angola      2006    3   2   7   3   6

4
在输出结果的第一行(列名)中看到了一个指标列[左侧列(“Indicator”)],除此之外还有来自指标列的导出列[右侧5列(1, 2, 3, 4, 5)],为什么会有这个指标列呢? - 3kstc
这是索引。 - JAB
谢谢 - 我尝试过类似的操作(https://stackoverflow.com/questions/49185446/how-to-pivot-a-dataframe-with-pandas),但是没有成功。 - 3kstc
@JAB 如果左侧的“指示器列”是索引,那么在执行reset_index之后为什么它还在那里? - thegreatcoder
1
@thegreatcoder reset_index()函数可以将结果展平,你可能需要添加df_your_result_table_name.columns.name = None来移除它。 - undefined

9
这只是一个猜测:它不是一个“.csv”文件,而是从“.csv”导入的Pandas DataFrame。
要对这个表进行透视,您需要在Pandas“pivot”中提供三个参数。例如,如果df是您的数据框:
table = df.pivot(index='Country',columns='Year',values='Value')  
print (table)

这应该可以产生所期望的输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接