我有一个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转换为第二个?我有一个实现,但是既不干净也不简短。我可以根据需要提供它,但我不想使我的问题陈述变得混乱。
答案 0 :(得分:4)
将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()