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

标签 python pandas dataframe

我有一个这样的数据框

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)

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

最佳答案

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

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

或者,如果您想要相同级别的性能而不需要 pandas 的开销,您可以使用 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

—piRSquared

关于python - 通过计算单元格中的值来计算共现矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279402/

相关文章:

python - 简单的 Python 爬虫/蜘蛛运行时错误

python - 使用 pandas list 使用 postgresql 查询过滤数据

r - 根据另一列计算一列的总和

r - 如何根据 R 中的类型选择列?

javascript - API 响应在 Node 中为 NULL 但在 Python 中运行良好

python - 为什么 Python 的 `from` 形式的 import 语句会绑定(bind)模块名称?

python - Pandas,如何将多列组合成一个数组列

python - 选定时间范围内的真实值

java - Spark/Scala - 从 Json 创建 DataFrame 时出错 : java. lang.NoSuchMethodError : org. apache.spark.sql.DataFrameReader.json

python - Python 中基于 GUI 的冒险游戏 - 未定义玩家名称