我有一个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转换为第二个?我有一个实现,但既不干净也不简短。如果需要的话,我可以提供,但我不想把我的问题陈述弄得一团糟。
将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
要删除列名属性,请使用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()