pd.crosstab() 的自定义规范化

Customized normalization of pd.crosstab()

我正在使用 pandas 数据框并使用以下交叉表公式对结果进行制表:

ct = pd.crosstab(index=[df['Gender'], df['Education'],df['MaritalStatus']],
                                 columns=df['month'], normalize='columns').round(2)

交叉表的输出:

我不想按整列计算百分比。相反,例如,对于第一行,我想要的输出是计算 0 级女性的百分比和单身/0 级女性的数量(以黄色突出显示)。

实现这个的方法是什么?

使用GroupBy.transform并划分原始输出(也删除了normalize='columns'):

ct = pd.crosstab(index=[df['Gender'], df['Education'],df['MaritalStatus']],
                        columns=df['month'])

#normalize by levels Gender and Education
ct = ct.div(ct.groupby(level=['Gender','Education']).transform('sum')).round(2)