我需要在数据帧上找到所有对列的操作。我提出了一个天真的解决方案,但想知道是否有任何优雅的方式可用。
以下脚本计算两列中包含一个的行数。
输入:
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]]))
答案 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]])