小能豆

如何在 Pandas 中旋转数据框?

javascript

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

对于如何实现这一目标您有什么想法吗?


阅读 53

收藏
2024-07-24

共1个答案

小能豆

你可以.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国家和年份转换回正常列。

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
2024-07-24