如何在三向表中使用pandas crosstab获取行百分比?

2024-05-18 11:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个解决方案How to make a pandas crosstab with percentages?,但提出的解决方案不适用于三向表。在

考虑下表:

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                   'B' : ['A', 'B', 'C'] * 8,
                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4})




pd.crosstab(df.A,[df.B,df.C],colnames=['topgroup','bottomgroup'])
Out[89]: 
topgroup      A       B       C    
bottomgroup bar foo bar foo bar foo
A                                  
one           2   2   2   2   2   2
three         2   0   0   2   2   0
two           0   2   2   0   0   2

在这里,我想得到每个topgroup(A、B和C)内的行百分比。在

使用apply(lambda x: x/sum(),axis=1)将失败,因为每个组中的百分比总和必须为1。在

有什么想法吗?在


Tags: todfmakefoobar解决方案onehow
1条回答
网友
1楼 · 发布于 2024-05-18 11:06:07

如果我理解你的问题,你可以写:

>>> table = pd.crosstab(df.A,[df.B,df.C], colnames=['topgroup','bottomgroup'])
>>> table / table.sum(axis=1, level=0)

topgroup       A         B         C     
bottomgroup  bar  foo  bar  foo  bar  foo
A                                        
one          0.5  0.5  0.5  0.5  0.5  0.5
three        1.0  0.0  0.0  1.0  1.0  0.0
two          0.0  1.0  1.0  0.0  0.0  1.0

相关问题 更多 >