Pandas的crosstab函数( 四 )


Pandas的crosstab函数文章插图
右下角的单元格将始终包含观察的总数 , 或者如果“normalize”设置为True , 则为1:
pd.crosstab(index=diamonds['cut'],columns=diamonds['clarity'],margins=True,margins_name='Total Percentage',normalize=True)
Pandas的crosstab函数文章插图
请注意 , 如果将margins设置为True , 则热图是无用的 。
Pandas crosstab() , 多组对于index和columns参数 , 可以传递多个变量 。 结果将是一个具有多级索引的数据帧 。 这次我们插入所有的分类变量:
pd.crosstab(index=[diamonds['cut'], diamonds['clarity']],columns=diamonds['color'])
Pandas的crosstab函数文章插图
对于index , 我传递了color和cut 。 如果我把它们传递给列 , 结果将是一个包含40列的数据帧 。 如果你注意的话 , 多级索引如预期的那样命名为cut和clear 。 对于存在多级索引或列名的情况 , crosstab()有方便的参数来更改它们的名称:
pd.crosstab(index=[diamonds['cut'], diamonds['clarity']],columns=diamonds['color'],rownames=['Diamond Cut', 'Clarity']).head()
Pandas的crosstab函数文章插图
传递相应名称的列表 , 以将索引名称更改为行名称 。 这个过程对于控制列名的colnames是相同的 。
有一件事让我很惊讶 , 如果你把多个函数传递给aggfunc , pandas就会抛出一个错误 。 同样 , StackOverflow上的伙计们认为这是一个bug , 而且已经有6年多没有解决过了 。
最后要注意的是 , 在pivot_table()和crosstab()中 , 都有一个dropna参数 , 如果设置为True , 则会删除包含所有nan的列或行 。


推荐阅读