【发布时间】:2020-09-16 00:23:43
【问题描述】:
我有 2 个 DataFrame,其中有一列的值是 set 类型,包含 8 位整数。
df1(包含大约 200k 行)
id s1
0 0 {43649632, 95799329, 40649644, 23335890, 81779...
1 1 {69900026, 74441229}
2 2 {85195648, 55750338, 98936902, 82000264, 43544...
3 3 {21916700, 13627806}
4 4 {62929026, 38592365, 44179790, 38355127}
df2(包含大约 900k 行)
id s1
0 0 {58209736, 25405713, 28691898, 94682562}
1 1 {81089732, 82343077}
2 2 {59692896, 33234306, 40445479, 18728345, 24464...
3 3 {71406042, 69900026, 74441229}
4 4 {62929026}
我想知道从df2 和df2 中找到符合ONE OF THIS 条件的ids 对的最快方法: p>
-
df1.s1是d2.s1的子集
或
-
df2.s1是d1.s1的子集
例如,
- df1 的 id=1 是 df2 的 id=3 的子集,因此 (1, 3) 是有效对
- df2 的 id=4 是 df1 的 id=4 的子集,因此 (1, 4) 是有效对
我已经尝试了下面的代码,但需要大约 20 个小时:
id_pairs = []
for i in tqdm(list(df2.itertuples(index=False))):
for j in df1.itertuples(index=False):
if i.s1.issubset(j.s1) or j.s1.issubset(i.s1):
id_pairs.append((i.id, j.id))
有没有更快或更有效的方法来做到这一点?
【问题讨论】:
标签: python pandas performance loops set