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

acr*_*dic 6 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
Run Code Online (Sandbox Code Playgroud)

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

  id  male  female
0  1    10       8
1  2     5      10
2  3     3       4
Run Code Online (Sandbox Code Playgroud)

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

Erf*_*fan 6

pivot_table与以下一起使用rename

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
Run Code Online (Sandbox Code Playgroud)

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

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

    female  male
id              
1        8    10
2       10     5
3        4     3
Run Code Online (Sandbox Code Playgroud)

如果您想id返回为列,请使用reset_index

piv = piv.reset_index()

   id  female  male
0   1       8    10
1   2      10     5
2   3       4     3
Run Code Online (Sandbox Code Playgroud)

全部作为一个衬垫

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