在两个数据帧上执行列式操作的优雅方式

时间:2014-10-03 00:34:05

标签: python pandas

我需要在数据帧上找到所有对列的操作。我提出了一个天真的解决方案,但想知道是否有任何优雅的方式可用。

以下脚本计算两列中包含一个的行数。

输入:

   a  b  c  d
0  0  0  1  0
1  1  1  0  1
2  1  1  1  0

输出:

2   2   1   1
2   2   1   1
1   1   2   0
1   1   0   1

代码:

df = DataFrame(random.randint(0,high=2, size=(3,4)),  columns=['a','b', 'c', 'd'])
mycolumns = df.columns
for i in range(0, shape(df)[1]):
    for j in range(0, shape(df)[1]):
        print(sum(df[mycolumns[i]] & df[mycolumns[j]]))

1 个答案:

答案 0 :(得分:1)

这基本上是X'X的矩阵乘法,其中X'X的转置:

>>> xs = df.values
>>> xs.T.dot(xs)
array([[2, 2, 1, 1],
       [2, 2, 1, 1],
       [1, 1, 2, 0],
       [1, 1, 0, 1]])