在Pandas中,如何将布尔列转换为分类列?

时间:2019-11-04 18:42:45

标签: python pandas

我有一个Pandas DataFrame,其中的一列包含布尔值。想像这样:

   id  is_male  count
0   1     True     10
1   1    False      8
2   2     True      5
3   2    False     10
4   3     True      3
5   3    False      4

其中id例如标识一所学校的班级,其他列指示该班级中有多少名男女学生。现在,可以更简洁的方式显示相同的信息,例如:

  id  male  female
0  1    10       8
1  2     5      10
2  3     3       4

我的问题:是否有使用Pandas的干净方法将第一个DataFrame转换为第二个?我有一个实现,但是既不干净也不简短。我可以根据需要提供它,但我不想使我的问题陈述变得混乱。

1 个答案:

答案 0 :(得分:4)

pivot_tablerename一起使用:

piv = df.pivot_table(index='id', 
                     columns='is_male', 
                     values='count').rename(columns={False:'female', True:'male'})

is_male  female  male
id                   
1             8    10
2            10     5
3             4     3

要删除列名属性,请使用rename_axis

piv = piv.rename_axis(None, axis=1)

    female  male
id              
1        8    10
2       10     5
3        4     3

如果您想将id作为列,请使用reset_index

piv = piv.reset_index()

   id  female  male
0   1       8    10
1   2      10     5
2   3       4     3

全部作为一个班轮

piv = df.pivot_table(index='id', columns='is_male', values='count')\
        .rename(columns={False:'female', True:'male'})\
        .rename_axis(None, axis=1)\
        .reset_index()