Сравните группы с одинаковым количеством вхождений предметов в каждой группе

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

введите описание изображения здесь

Всего 4 группы. AB, BA, CD и DC. В каждой группе есть несколько предметов.

Что я хочу сделать, это сравнить группы AB и BA (только в противоположном направлении) и посмотреть, совпадают ли значения точно один раз в обеих группах. Таким образом, ID1 в группе AB имеет значение 1000, которое совпадает с ID5 в группе BA, аналогично для ID2 в AB совпадает с ID4 в BA. Так что обе группы совпадают.

Теперь, если мы рассмотрим группы CD и DC, есть проблема, они не совпадают, потому что хотя значения 666 и 777 можно найти в каждой группе, но нам нужно использовать значение для сравнения, только если это значение не было сопоставлено ранее. Так что в этом случае

  • ID7 на CD соответствует ID11 в DC,
  • ID8 на CD соответствует ID10 в DC,
  • ID9 на CD не должен совпадать (ID11 уже сопоставлен ранее).

Другими словами, последовательность соответствия не имеет значения, но значение имеет значение в каждой группе.

Я ожидаю выхода, как это

введите описание изображения здесь

Я пытаюсь сделать это в Excel и Power Query, но не знаю, как это сделать. Индексные столбцы или группировка могут быть полезны, но я не уверен, как решить эту проблему.

Данные имеют около 10000 строк и, вероятно, 2000 групп. Количество строк в каждой группе не фиксировано и может варьироваться в диапазоне от 1 до 8. И обратные группы тоже иногда не существуют.

Всего 1 ответ


Это похоже на работу. Можно вставить в PQ с помощью Home ... Advanced Editor ...

Предполагается 3 столбца с идентификаторами заголовков, группы , значения в диапазоне Table1

Затем столбец « Группа дубликатов » разбивает дублирующую группу на два отдельных столбца.

Сгруппируйте данные по 3 пунктам - Group.1 , Group.2 и Value ; затем добавляет индекс , создавая, таким образом, совокупный счетчик каждого значения для этой комбинации групп

Объединяет всю таблицу в себя, но с Group.1, соответствующей Group.2 , и Group.2, соответствующей Group.1

Расширяет. Все, без совпадения ... не имеет аналогов и возвращает ноль

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Duplicated Column" = Table.DuplicateColumn(Source, "Group", "Groupx"),
#"Split Column by Delimiter" = Table.SplitColumn(#"Duplicated Column", "Groupx", Splitter.SplitTextByEachDelimiter({"-"}, QuoteStyle.Csv, false), {"Group.1", "Group.2"}),
#"Grouped Rows" = Table.Group(#"Split Column by Delimiter", {"Group.1", "Group.2","Value"}, {{"Count", each Table.AddIndexColumn(_, "Index",1,1), type table}}),
#"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Group", "ID", "Index"}, {"Group", "ID", "Index"}),
#"Merged Queries" = Table.NestedJoin(#"Expanded Count",{"Group.1", "Group.2", "Value", "Index"},#"Expanded Count",{"Group.2", "Group.1", "Value", "Index"},"Expanded Count",JoinKind.LeftOuter),
#"Expanded Expanded Count" = Table.ExpandTableColumn(#"Merged Queries", "Expanded Count", {"Index"}, {"Match"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Expanded Count",{"Group.1", "Group.2", "Index"}),
#"Sorted Rows" = Table.Sort(#"Removed Columns",{{"ID", Order.Ascending}})
in #"Sorted Rows"

Есть идеи?

10000