首页 > 解决方案 > Python pandas:在行中透视DataFrame列

问题描述

我有一个如下的 pandas DataFrame,显示多个科目的学生成绩:

       Name    Subject    Score
0       Tom          A       91
1       Tom          B       92
2       Tom          C       93
3       Bob          A       94
4       Bob          C       95
5       Ali          B       96
6       Ali          C       97

请注意,并非每个学生在所有科目中都有分数。我想把它变成这样的 DataFrame:

      Name     A     B     C
0      Tom    91    92    93
1      Bob    94          95    
2      Ali          96    97

在这个支点中要实现的目标:

  1. 按“名称”对分数进行分组
  2. 插入主题列
  3. 在姓名和科目的交叉空间排列分数

我是 pandas 的新手,但我查看了 DataFrame.pivot_table(),但不幸的是找不到正确的方法。

标签: pythonpandasdataframepivot-table

解决方案


您正确地使用了pivot_table来解决这个问题:

df = df.pivot_table(index='Name', values='Score', columns='Subject') \
    .reset_index() \
    .rename_axis(None, axis=1)
print(df)

输出:

  Name     A     B     C
0  Ali   NaN  96.0  97.0
1  Bob  94.0   NaN  95.0
2  Tom  91.0  92.0  93.0

Pivot也适用于这种情况:

df = df.pivot(index='Name', values='Score', columns='Subject') \
    .reset_index() \
    .rename_axis(None, axis=1)

推荐阅读