给定具有不同分类变量的数据框,我如何返回包含百分比而不是频率的交叉表?
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
使用交叉表中的边距选项来计算行和列总计让我们足够接近认为应该可以使用 aggfunc 或 groupby,但我微薄的大脑无法思考。
B A B C
A
one .33 .33 .33
three .33 .33 .33
two .33 .33 .33
最佳答案
从 Pandas 0.18.1 开始,有一个 normalize
选项:
In [1]: pd.crosstab(df.A,df.B, normalize='index')
Out[1]:
B A B C
A
one 0.333333 0.333333 0.333333
three 0.333333 0.333333 0.333333
two 0.333333 0.333333 0.333333
您可以在 all
、index
(行)或 columns
之间进行规范化。
更多详情请见 in the documentation .
关于python - 如何用百分比制作 Pandas 交叉表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247203/