Сравните группы с одинаковым количеством вхождений предметов в каждой группе - PullRequest
1 голос
/ 23 марта 2020

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

enter image description here

Таким образом, всего 4 группы. AB, BA, C -D и D- C. В каждой группе есть несколько элементов.

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

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

  • ID7 в C -D сопоставляется с ID11 в D- C,
  • ID8 в C -D сопоставляется с ID10 в D - C,
  • ID9 в C -D НЕ должны совпадать (ID11 уже сопоставлен ранее).

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

Я ожидаю вывод, подобный этому

enter image description here

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

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

1 Ответ

1 голос
/ 24 марта 2020

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

Принимает 3 столбца с заголовками ID , Группа , Значение in диапазон Таблица1

Дубликаты Группа * Столбец затем разбивает дубликат Группа на два отдельных столбца

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

Объединяет всю таблицу на себя, но с 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...