У меня возникли проблемы с поиском соответствия в любых столбцах в 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]]
например, df1[0] имеет 2,4,6,8, а df2[0] имеет 2,4,6,8 и т. д.
Так почему же 1 в результирующем списке, когда он только во втором фрейме данных? Пожалуйста, предоставьте более четкий и, желательно, более короткий пример, иллюстрирующий то, что вы хотите, чтобы произошло.
Вы можете использовать наборы, чтобы установить, есть ли совпадение, и объединить/сортировать подлисты в выходные списки.
Я не смог получить именно ваш ожидаемый результат, но близко (возможно, [1, 10, 13, 13, 15, 17, 22, 23, 26, 33, 35, 44]
во второй группе отсутствовал в вашем примере):
result = [ [sorted(c1+c2) for c2 in df2 if set(c1)&set(c2)] for c1 in df1 ]
for group in result:
print(*group,sep = "\n")
print()
[1, 2, 2, 4, 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, 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, 10, 13, 13, 15, 17, 22, 23, 26, 33, 35, 44] # <-- extra
[1, 6, 7, 8, 9, 10, 10, 13, 15, 17, 26, 44]
[5, 6, 20, 22, 23, 27, 28, 34, 34, 37, 37, 40]
[8, 12, 13, 27, 28, 34, 34, 37, 37, 40, 45, 46]
Обратите внимание, что использование наборов предполагает, что у вас нет повторяющихся значений в подсписках. Если вы это сделаете, вам нужно будет использовать класс Counter
из коллекций вместо set
.
Типа близко. я обновил свои и результаты. Может быть, вы можете мне помочь.
Обновил мой ответ, но в моих результатах все еще есть дополнительный список.
Как именно вы получаете результирующий список? Я не вижу шаблона в том, как должны сопоставляться два кадра данных.