给定一个包含不同分类变量的矩阵,我如何返回一个包含百分比而不是频率的交叉表?
df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
'B' : ['A', 'B', 'C'] * 8,
'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
'D' : np.random.randn(24),
'E' : np.random.randn(24)})
pd.crosstab(df.A,df.B)
B A B C
A
one 4 4 4
three 2 2 2
two 2 2 2
字符串
预期产出:
B A B C
A
one .33 .33 .33
three .33 .33 .33
two .33 .33 .33
型
6条答案
按热度按时间i5desfxk1#
从Pandas 0.18.1开始,有一个
normalize
选项:字符串
在这里,您可以在
all
,index
(行)或columns
上进行标准化。更多详情请访问in the documentation。
ubof19bj2#
字符串
基本上,您只需使用执行
row/row.sum()
的函数,并使用apply
和axis=1
按行应用它。(If在Python 2中这样做,你应该使用
from __future__ import division
来确保除法总是返回浮点数。zxlwwiss3#
我们可以通过乘以
100
来表示百分比:字符串
为了方便我把它围起来了。
wwtsj6pe4#
如果你想得到总数的百分比,你可以除以df的len而不是行和:
字符串
6ljaweal5#
规范化索引将很简单。在
pd.crosstab()
中使用参数normalize = "index"
。4uqofj5v6#
另一种选择是使用div而不是apply:
字符串
除以索引上的和:
型
型