Использование GROUP BY для нескольких столбцов, где записи группируются вместе, если ЛЮБОЙ из столбцов возвращает совпадение - PullRequest
0 голосов
/ 24 сентября 2019

Допустим, у меня есть следующая таблица:

Record_ID | Match_criteria_1 |  Match_criteria_2  | Match_criteria_3 | Dollars  

     1    |  A               |   V                |   F              |   10  
     2    |  A               |   W                |   G              |   20  
     3    |  B               |   W                |   H              |   30  
     4    |  B               |   X                |   I              |   40  
     5    |  C               |   Y                |   F              |   50  
     6    |  C               |   Z                |   J              |   60  
     7    |  D               |   L                |   P              |   70      

Если я попытаюсь использовать функцию pd.merge для Match_criteria_1, Match_criteria_2 и Match_criteria_3, я получу 7 отдельных групп / разделов.


Record_ID | Match_criteria_1 |  Match_criteria_2  | Match_criteria_3 | Dollars     | Total_Dollars 

     1    |  A               |   V                |   F              |   10        | 10 
     2    |  A               |   W                |   G              |   20        | 20 
     3    |  B               |   W                |   H              |   30        | 30  
     4    |  B               |   X                |   I              |   40        | 40 
     5    |  C               |   Y                |   F              |   50        | 50
     6    |  C               |   Z                |   J              |   60        | 60
     7    |  D               |   L                |   P              |   70        | 70

Как видите, ни одна из записей не имеет одинаковые Match_criteria_1, Match_criteria_2 и Match_criteria_3.

Но что, если я захочу сгруппировать записи с одинаковыми Match_criteria_1, Match_criteria_2 ИЛИ Match_criteria_3?

Итак, используя мой пример, запись 1 соответствует записи 2 из-за Match_criteria_1, запись 2 соответствует записи 3 из-за Match_criteria_2, запись 3 соответствует записи 4 из-заMatch_criteria_1, запись 5 совпадает с записью 1 из-за Match_Criteria_3, а запись 6 сопоставляется с записью 5 из-за Match_criteria 1 (так что происходит переходное свойство).Тогда желаемый результат:

Record_ID | Match_criteria_1 |  Match_criteria_2  | Match_criteria_3 | Dollars     | Total_Dollars 

     1    |  A               |   V                |   F              |   10        | 210 
     2    |  A               |   W                |   G              |   20        | 210 
     3    |  B               |   W                |   H              |   30        | 210  
     4    |  B               |   X                |   I              |   40        | 210 
     5    |  C               |   Y                |   F              |   50        | 210
     6    |  C               |   Z                |   J              |   60        | 210
     7    |  D               |   L                |   P              |   70        | 70

, где Total_dollars - сумма каждой записи, которая соответствует транзитивности.Таким образом, записи 1 и 6 могут не иметь общих критериев соответствия, но они по-прежнему сгруппированы вместе, поскольку обе они совпадают с записью 5. Это исключает запись 7, поскольку она не соответствует ни одной из других записей, основанных на любом из трех критериев..

...