python - 如何用百分比制作 Pandas 交叉表?

标签 python pandas crosstab

给定具有不同分类变量的数据框,我如何返回包含百分比而不是频率的交叉表?

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

您可以在 allindex(行)或 columns 之间进行规范化。

更多详情请见 in the documentation .

关于python - 如何用百分比制作 Pandas 交叉表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247203/

相关文章:

python - Pandas 中特定列的特定值的总和

python - 绘图 : single legend when plotting on secondary y-axis

r - 用R中的图表可视化交叉表

python - 嵌套 while 循环在 python 中无法正确循环

python - 删除 MESA 中的代理

python - 如何根据行/列名称将一个数据框的列附加为另一个数据框的行?

View 中的 MySQL 交叉表

sql - postgresql 中的 Crosstab() 函数导致错误。 (已安装 tablefunc 模块)

python - 使用 Map 并行化 for 循环并使用 pyspark 在 Spark 中减少

python - cProfile 将数据保存到文件会导致字符困惑