python - Pandas - 创建一个对称矩阵来计算记录数

标签 python pandas

我有一个如下所示的数据框

ID  |  Value
1   |  A
1   |  B
1   |  C
2   |  B
2   |  C

我想创建一个基于值的对称矩阵:

    A   B  C
 A  1   1  1
 B  1   2  2
 C  1   2  2

这基本上表明有多少人同时具有这两个值 (v1,v2)。我目前正在使用 for 循环来扫描数据帧的每个组合,但想知道是否有更简单的方法使用 pandas 来完成此操作。

最佳答案

使用带有 crosstabID 列交叉连接的合并和 DataFrame.rename_axis用于删除索引和列名称:

df = pd.merge(df, df, on='ID')

df = pd.crosstab(df['Value_x'], df['Value_y']).rename_axis(None).rename_axis(None, axis=1)
print (df)
   A  B  C
A  1  1  1
B  1  2  2
C  1  2  2

关于python - Pandas - 创建一个对称矩阵来计算记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55065199/

相关文章:

python - 在 pandas 行中嵌套列名,尝试执行 unstack 类型操作

python - 为什么 pandas.DataFrame.sum(axis=0) 返回每列中的值的总和,其中轴 =0 表示行?

python - 将两个具有相同列的 Pandas Dataframe 合并为一个字符串列

python - 从 yyyyMMdd int 列表中最有效地构建 pandas.DateTimeIndex

python - 每当我尝试运行 Google 应用程序引擎开发服务器时,它都会抛出以下错误

python - Pandas 内部合并/连接返回所有行

python - 我需要做什么才能让 Watson 聊天机器人持续对话?

python - 使用 PyOpenGL 和 PyQt5 制作球体时出现问题

python - 如何获取 IOError 的 errno?

python - 如何在单行中使用 for 循环将这些列表拆分为列表?