通过计算单元格中的值来计算共现矩阵

发布于 2021-01-29 16:00:34

我有一个这样的数据框

df = pd.DataFrame({'a' : [1,1,0,0], 'b': [0,1,1,0], 'c': [0,0,1,1]})

我想得到

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

其中,a,b,c是列名,当另一列中的过滤器为“ 1”时,我得到所有列中的计数为“ 1”的值。例如,当df.a == 1时,我们计算a = 2,b = 1,c
= 0等

我做了一个循环来解决

matrix = []
for name, values in df.iteritems():
    matrix.append(pd.DataFrame( df.groupby(name, as_index=False).apply(lambda x: x[x == 1].count())).values.tolist()[1])
pd.DataFrame(matrix)

但是我认为有一个更简单的解决方案,不是吗?

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您似乎想要矩阵乘积,因此请使用DataFrame.dot

    df.T.dot(df)
       a  b  c
    a  2  1  0
    b  1  2  1
    c  0  1  2
    

    另外,如果您希望在没有熊猫开销的情况下达到相同的性能水平,则可以使用以下公式计算乘积np.dot

    v = df.values
    pd.DataFrame(v.T.dot(v), index=df.columns, columns=df.columns)
    

    或者,如果您想变得可爱,

    (lambda a, c: pd.DataFrame(a.T.dot(a), c, c))(df.values, df.columns)
    
    
    
       a  b  c
    a  2  1  0
    b  1  2  1
    c  0  1  2
    

    -piSquared



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看