Поиск наиболее повторяющихся значений по фильтру

Есть массив с 2 колонками введите сюда описание изображения

Как составить цикл или что применить, чтобы выявить какое значение из колонки 2 с каким другим значением из колонки 2 чаще всего встречается вместе в одинаковом значении параметра колонки 1.

Например из представленной таблицы для значения 600814: с ним вместе 3 раза встречается значение 24678, и 2 раза встречается значение 24754.

Как это оформить чтобы оно автоматически искало такие совпадения, и сортировало по убыванию кол-ва частоты встречи вместе.


Ответы (2 шт):

Автор решения: roddar92

Можно воспользоваться Counter и defaultdict, чтобы можно было создавать словарь словарей. А ещё Counter умеет сортировать ключи по убыванию частот методом most_common(). Плюс обеих структур состоит в том, что перед добавлением ключа не надо проверять его наличие в словаре, как это делается в dict-е.

Вот прототип кода с использованием этих структур:

from collections import Counter, defaultdict

first_col_dict = defaultdict(dict)

for first, second in zip(first_col, enumerate(second_col)):
    i, elem = second
    if first_col_dict[first][elem] is None:
        first_col_dict[first][elem] = Counter()        

    if i - 1 >= 0:
        first_col_dict[first][elem][second_col[i - 1]] += 1
    if i + 1 < len(first_col):
        first_col_dict[first][elem][second_col[i + 1]] += 1
→ Ссылка
Автор решения: CrazyElf

Если "скормить" в Counter кортежи, то он сам всё сделает:

from collections import Counter

arr = [(123213123, 1), (123213123, 2), (123213123, 1), (232132123, 1), (232132123, 2)]

Counter(arr)

Вывод:

Counter({(123213123, 1): 2,
         (123213123, 2): 1,
         (232132123, 1): 1,
         (232132123, 2): 1})
→ Ссылка