我无法在 df1 中的任何列中找到与 df2 中的任何列匹配的匹配项并返回匹配值和值。例如,
df1 = [[2,4,6,8,9,10],[10,13,15,17,26,44],[27,28,34,37,40]]
df2 = [[1,2,4,5,6,8],[5,6,20,22,23,34],[8,12,13,34,45,46],[9,10,14,29,32,33],[1,22,13,23,33,35],[1,6,7,8,9,10],[0,2,3,5,6,8]]
我希望我的结果如下所示
result = [[1,2,2,4,5,6,6,8,8,9,10],
[2,4,5,6,6,8,9,10,20,22,23,34],
[2,4,6,8,8,9,10,12,13,34,45,46]
[2,4,6,8,9,9,10,10,14,29,32,33]
[1,2,4,6,6,7,8,8,9.10,10]
[0,2,2,3,4,5,6,6,8,8,9,10]],
[[8,10,12,13,13,15,17,26,34,44,45,46],
[9,10,10,13,14,15,17,26,29,32,33,44],
[1,6,7,8,9,10,10,13,15,17,26,44]],
[[5,6,20,22,23,,27,28,34,34,37,40]
[8,12,13,27,28,34,37,40,45,46]]
您可以使用集合来建立基本匹配并将匹配值添加到输出列表。
我无法准确得到您预期的结果,但很接近(您的示例中可能缺少第二组的
[9, 10, 10, 14, 29, 32, 33]
):
result = [ [sorted([*c2,*set(c1)&set(c2)]) for c2 in df2 if set(c1)&set(c2)]
for c1 in df1 ]
print(*result,sep="\n")
[[1, 2, 2, 4, 4, 5, 6, 6, 8, 8], [5, 6, 6, 20, 22, 23, 34],
[8, 8, 12, 13, 34, 45, 46], [9, 9, 10, 10, 14, 29, 32, 33],
[1, 6, 6, 7, 8, 8, 9, 9, 10, 10], [0, 2, 2, 3, 5, 6, 6, 8, 8]]
[[8, 12, 13, 13, 34, 45, 46], [9, 10, 10, 14, 29, 32, 33],
[1, 13, 13, 22, 23, 33, 35], [1, 6, 7, 8, 9, 10, 10]]
[[5, 6, 20, 22, 23, 34, 34], [8, 12, 13, 34, 34, 45, 46]]
请注意,使用集合假定您在子列表中没有重复值。如果你这样做,那么你需要使用集合中的
Counter
类而不是set
.