我正在尝试根据dataframe
中的python
构建一个表格,其中显示了两个特定类别之间的常用字词频率。
为此,我首先构建了一个default dict
,其中包含key
的每个类别以及value
处与该类别相关的单词列表。
现在,我需要为两个categories
的每个组合构建一个表,该表演示了最终所需结果表的共性,例如:
A B C
A 10 2 1
B 2 5 2
C 1 2 3
我正在使用的示例数据如下:
Cat Item
A dog
A cat
A bear
A fish
A monkey
A tiger
A lion
A rabbit
A horse
A turtle
B dog
B cat
B flower
B plant
B bush
C dog
C flower
C plant
我正在使用的工作代码是:
import pandas as pd
import numpy as np
from collections import defaultdict
inFile = '\path\to\infile.csv'
data = pd.read_csv(inFile, sep='\t')
dicts = defaultdict(list)
for i, j in zip(data['Cat'],data['Item']):
dicts[i].append(j)
for k,v in dicts.iteritems():
set1 = set(v)
set2 = set(v)
for k in set1.intersection(set2):
print k,v
运行上述内容后:结果default dict
(intersection
之前)是以下
{'A':['dog','cat','bear','fish','monkey','tiger','lion','rabbit','horse','turtle'],'B':['dog','cat','flower','plant','bush'],'C':['dog','flower','plant']}
试图研究这个问题,我遇到了following solution: 这是向正确方向迈出的一步,因为它是根据多个dics中的键计数和分组值,但它没有考虑每个键组合之间的值的并集 该词典。
我也查看了一些查找匹配键或值的解决方案,但其中大多数(例如HERE)只处理两个词典的实例而不是多个词典。
因此,我仍然坚持如何计算和计算MULTIPLE dicts中每个键组合之间的公共元素总数。
答案 0 :(得分:1)
我已经制作了一本字典,你可以将其数据格式化为一个表格:
使用&
运算符进行交集,这正是您所需要的: -
>>> dicts = {'A':['dog','cat','bear','fish','monkey','tiger','lion','rabbit','horse','turtle'],'B':['dog','cat','flower','plant','bush'],'C':['dog','flower','plant']}
>>> dicts.items()
[('A', ['dog', 'cat', 'bear', 'fish', 'monkey', 'tiger', 'lion', 'rabbit', 'horse', 'turtle']), ('C', ['dog', 'flower', 'plant']), ('B', ['dog', 'cat', 'flower', 'plant', 'bush'])]
>>> dicts = {'A':['dog','cat','bear','fish','monkey','tiger','lion','rabbit','horse','turtle'],'B':['dog','cat','flower','plant','bush'],'C':['dog','flower','plant']}
>>> items = sorted(dicts.items())
>>> res = {}
>>> for i in range(len(items)) :
... for j in range(i,len(items)) :
... res[(items[i][0],items[j][0])] = len(set(items[i][1]) & set(items[j][1]))
... res[(items[j][0],items[i][0])] = res[(items[i][0],items[j][0])]
...
>>> res
{('B', 'C'): 3, ('A', 'A'): 10, ('B', 'B'): 5, ('B', 'A'): 2, ('C', 'A'): 1, ('C', 'B'): 3, ('C', 'C'): 3, ('A', 'B'): 2, ('A', 'C'): 1}
>>>