【发布时间】:2018-02-08 08:33:52
【问题描述】:
这里是熊猫初学者问题:
如何为所有列创建交叉频率计数表?我想使用输出来制作显示每对列之间计数的 seaborn 热图。
我有一个数据框(使用 pyspark 从 hdfs 拉下),其中包含约 70 个唯一列和大约 600K 行
样本期望输出:
C1 C2 C3 C4 ...C70
C1 - 1 1 2
C2 1 - 0 2
C3 1 0 - 1
C4 2 2 1 -
...
C70
样本 DF:
import numpy as np
import pandas as pd
raw_data = {'C1': [ 0, 2, 5, 0, 3], #...600K
'C2': [3, 0 , 2, 0, 0],
'C3': [0, 0, 0, 3, 3],
'C4': [2, 1, 1, 4, 0]}
df = pd.DataFrame(raw_data, columns = ['C1', 'C2', 'C3','C4'])
print(df)
我尝试过使用 pandas 的 crosstab、pivot、pivot_table 并认为解决方案正在使用交叉表,但我无法以所需的输出格式获得它(抱歉,如果我遗漏了一些明显的东西)。任何帮助表示赞赏!
【问题讨论】:
-
你能解释一下这里的逻辑吗?为什么 c1-c4=2 和 c4-c1=1
-
我这里的数据是提交给一个或多个实体(每列)的独立文档(行)。我希望能够确定哪对(或什至组)实体收到最多的提交。我认为热图是一种可视化的好方法(因为有很多行和列),并且从阅读 seaborn 文档的形式来看,需要这种格式的数据(我认为)。
-
糟糕——你是对的;错字>
-
请让您的预期输出反映发布的示例输入。你在找
v = df.clip_upper(1); v.T.dot(v)吗? -
就是这样,谢谢!很抱歉造成混乱
标签: python pandas numpy crosstab