【发布时间】:2019-03-27 01:07:30
【问题描述】:
假设我们有一张桌子:
id | aliases
-------------
0 | ['a0', 'a1', 'a4', 'a11']
1 | ['a3', 'a5']
2 | ['a16', 'a18']
3 | ['a6', 'a8', 'a10']
4 | ['a7', 'a8', 'a9']
5 | ['a3', 'a12', 'a14']
6 | ['a5', 'a16', 'a17']
我想将映射到同一个aliases 的所有id 组合在一起;换句话说,最终结果将所有具有相交的aliases 的id 组合在一起,递归应用。在上述情况下,我们会:
-
0映射到['a0', 'a1', 'a4', 'a11'] -
1、2、5和6映射到['a3', 'a5', 'a12', 'a14', 'a16', 'a17', 'a18'] -
3和4映射到['a6', 'a7', 'a8', 'a9', 'a10']
有没有一种有效的方法来做到这一点?在我的实际用例中,我有大约 1500 万行。
有一种简单的方法可以流式传输行并检查每个新行中aliases 的每个元素是否在到目前为止处理的aliases 中;如果是这样,则将所有具有匹配aliases 的行的id 收集在一起,并将它们映射到匹配的aliases 的并集。
但是,这种方法在计算上似乎不切实际。
【问题讨论】:
-
这对我来说毫无意义,您将
id和list映射在一起的规则是什么?任何时候它和另一个 id 有共同点并且是递归的? -
如果您的列表不长,我不明白为什么这是不切实际的。但很难说没有数据样本。
-
@RockyLi 是的,就是这样,对不起,我会编辑问题以使其更清楚。
-
我也没有很好地理解这个问题。您想为常见别名创建唯一 ID 吗?我认为 LSH 算法有帮助。
标签: python pandas dataframe data-structures group-by