Поиск наиболее повторяющихся значений по фильтру
Как составить цикл или что применить, чтобы выявить какое значение из колонки 2 с каким другим значением из колонки 2 чаще всего встречается вместе в одинаковом значении параметра колонки 1.
Например из представленной таблицы для значения 600814: с ним вместе 3 раза встречается значение 24678, и 2 раза встречается значение 24754.
Как это оформить чтобы оно автоматически искало такие совпадения, и сортировало по убыванию кол-ва частоты встречи вместе.
Ответы (2 шт):
Можно воспользоваться 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
Если "скормить" в 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})
