У меня есть список, который я повторяю, чтобы подсчитать некоторые комбинации, и я хотел бы сохранить дополнительную информацию, помимо подсчетов. Counter
или defaultdict
хороши для подсчета, но я не уверен, как добавить дополнительную информацию. Например, если я складываю все списки длины 2 в моем столбце 'list_to_count'
, я могу сделать это:
import pandas as pd
from itertools import combinations
from collections import defaultdict
mydf = pd.DataFrame({'auxinfo': ['first', 'second', 'third'], 'list_to_count': [['apple', 'banana'], ['apple', 'banana', 'chicken'], ['apple']]})
print(mydf)
d=defaultdict(int)
for r in mydf.itertuples():
combos = combinations(r.list_to_count, 2)
for combo in combos:
combo_name = ','.join(sorted(combo))
d[combo_name] += 1
print(d)
Вот что я получаю:
auxinfo list_to_count
0 first [apple, banana]
1 second [apple, banana, chicken]
2 third [apple]
In [13]: d
Out[13]: defaultdict(int, {'apple,banana': 2, 'apple,chicken': 1, 'banana,chicken': 1})
Но я также хотел бы сохранить auxinfo
, например, в списке, где желаемый результат будет выглядеть как
{'apple,banana': (2, ['first', 'second']), 'apple,chicken': (1, ['second']), 'banana,chicken': (1, ['second'])}
defaultdict
может быть инициализирован как defaultdict(tuple)
, в котором я мог бы сохранить кортеж из (count, auxinfo_list)
, но сам auxinfo_list
не defaultdict
.