熊猫:行和总和的外积

时间:2014-01-28 10:20:02

标签: python r pandas outer-join chi-squared

在Pandas,我正在尝试手动编码卡方检验。我在下面的数据框中将row 0row 1进行了比较。

data
       2      3      5      10     30
0      3      0      6      5      0
1  33324  15833  58305  54402  38920

为此,我需要计算每个细胞的预期细胞计数:cell(i,j) = rowSum(i)*colSum(j) / sumAll。在R中,我可以通过采用outer()产品来实现这一点:

Exp_counts <- outer(rowSums(data), colSums(data), "*")/sum(data)    # Expected cell counts

我使用numpy的外部产品功能来模仿上述R代码的结果:

import numpy as np
pd.DataFrame(np.outer(data.sum(axis=1),data.sum(axis=0))/ (data.sum().sum()), index=data.index, columns=data.columns.values)
       2      3      5      10     30
0      2      1      4      3      2
1  33324  15831  58306  54403  38917

是否可以通过Pandas功能实现这一目标?

1 个答案:

答案 0 :(得分:1)

仅使用Pandas内置方法的完整解决方案:

def outer_product(row):
    numerator = df.sum(1).mul(row.sum(0))
    denominator = df.sum(0).sum(0)
    return (numerator.floordiv(denominator))

df.apply(outer_product)

Image

计时:对于100万行DF。

enter image description here