Как сопоставить два 2d списка

У меня возникли проблемы с поиском соответствия в любых столбцах в 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]]

Как именно вы получаете результирующий список? Я не вижу шаблона в том, как должны сопоставляться два кадра данных.

B Remmelzwaal 18.04.2023 14:49

например, df1[0] имеет 2,4,6,8, а df2[0] имеет 2,4,6,8 и т. д.

Chris 18.04.2023 14:56

Так почему же 1 в результирующем списке, когда он только во втором фрейме данных? Пожалуйста, предоставьте более четкий и, желательно, более короткий пример, иллюстрирующий то, что вы хотите, чтобы произошло.

B Remmelzwaal 18.04.2023 15:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Типа близко. я обновил свои и результаты. Может быть, вы можете мне помочь.

Chris 19.04.2023 05:20

Обновил мой ответ, но в моих результатах все еще есть дополнительный список.

Alain T. 19.04.2023 19:46

Другие вопросы по теме