如何实现pd.crosstab()的自定义归一化,按指定分组计算占比
解决方案
你之前使用normalize='columns'是按整列所有行的总和做归一化,不符合你需要的按「性别+教育程度」分组内计算婚姻状况占比的逻辑,可以按以下步骤实现:
- 先生成仅统计人数的交叉表,不提前做归一化
ct_count = pd.crosstab( index=[df['Gender'], df['Education'], df['MaritalStatus']], columns=df['month'] )
- 对交叉表按前两层索引(Gender、Education)分组,在分组内按列做归一化后保留两位小数:
ct = ct_count.groupby(level=[0, 1], group_keys=False).apply( lambda x: x.div(x.sum(axis=0)).round(2) )
逻辑说明
以上代码中groupby(level=[0,1])就是按「性别+教育程度」对数据分组,x.div(x.sum(axis=0))会将分组内每个月的各婚姻状况人数,除以该分组对应月份的总人数,完全匹配你需要的计算规则。
内容的提问来源于stack exchange,提问作者newuser1628
相关产品推荐
相关产品推荐

