使用numpy/pandas创建两列的联合点击数矩阵

2024-04-18 22:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

有些列的值为1.5mi(大数据)。它们的结构如下:

     col1 = [2,2,1,4,5,4,3,4,4,4,5,2,3,1,1 ..] etc.,
     col2 = [1,1,8,8,3,5,6,7,2,3,10.........] etc.,

我要做一个联合计数矩阵计数。col1的值范围是1到5,col2的范围是1到10。在

^{pr2}$

我已经用defaultdict&for循环实现了一个版本,但这需要一段时间。我确信这可以更熟练地直接用Pandas处理,我会很感激使用numpy/Pandas的最佳实现。许多其他类似的查询都指向 “群居”的大熊猫,但不是很精通。在

对于我基于dict的实现来说,以矩阵格式获得输出也比较困难。不过,我猜熊猫和纽比会更容易。谢谢!在


Tags: 数据版本pandasforetc矩阵结构col2
2条回答

numpy_indexed包(免责声明:我是其作者)具有有效解决此问题的功能:

import numpy_indexed as npi
print(npi.count_table(col1, col2))

这可能有用(使用numpy.histogram2d):

import numpy as np

col1 = np.random.random_integers(1, 5, 100)
col2 = np.random.random_integers(1, 10, 100)
bin1 = np.arange(0.5, 6.5, 1)
bin2 = np.arange(0.5, 11.5, 1)

mat = np.histogram2d(col1, col2, bins=[bin1, bin2])[0]
print mat.shape
print mat

它产生了

^{pr2}$

我没有用长度超过几千的列表来测试它,但是我认为它应该可以扩展到几百万个值。在


编辑:

你好,纳希瓦尔。我对熊猫不太熟悉(但我应该很熟悉),所以我花了几分钟在周围玩耍。这里有几种方法可以得到你想要的(我认为):

^{3}$

相关问题 更多 >