我在Python中有讨厌的代码
Id=np.arange(1,16)
l=np.arange(1,101).tolist()
Ing=random.choices(l,k=15)
base2= pd.DataFrame({'Id':Id,'Ingreso':Ing,})
base2=base2.set_index('Id')
base2['Grupo'] = pd.cut(base2['Ingreso'], bins=[0,30,50,70,100],labels=[1,2,3,4], include_lowest=True)
grouped = base2.groupby(['Ingreso', 'Grupo'], as_index=False)
s=np.arange(0,2).tolist()
base2['Sexo']= random.choices(s,k=15)
有了这个数据框,我想做一个交叉表
pd.crosstab(base2.Grupo,base2.Sexo)
这是我的输出
Sexo 0 1
Grupo
1 1 2
2 2 2
3 0 3
4 3 2
但是我想要这样的东西
Sexo Men Women
Grupo
1 1 2
2 2 2
3 0 3
4 3 2
在Python中可以吗?
答案 0 :(得分:2)
之前使用Series.map
。
pd.crosstab(base2.Grupo, base2.Sexo.map({0 : 'Men', 1 : 'Women'}))
或之后的DataFrame.rename
。
pd.crosstab(base2.Grupo, base2.Sexo).rename(columns={0 : 'Men', 1 : 'Women'})
输出
Sexo Men Women
Grupo
1 1 2
2 2 2
3 0 3
4 3 2