提取多个列表中的公共元素

extract common elements in several lists


一般来说,我想做的是在几个csv文件中提取"word"的共享栏中的公共元素。 (2008.csv, 2009.csv, 2010.csv .... 2015.csv)


所有文件的格式相同:'word','count'

'word' 包含特定年份在一个文档中出现的所有常用词。


这是其中一个文件的快照:

file 2008.csv


只要 8 个文件中有两个具有共同元素,我想知道那些共享元素以及它们在哪个文件中。(这很像 tfidf 计算...顺便说一句)

无论如何,我的目标是了解这些文件中频繁出现的单词的一些趋势。 (据我所知,一个元素最多可以存在于五个文件中。)

我想知道单词第一次出现的时间,也就是说,一个单词在文件 C 中,但不在文件 B 和 A 中。

我知道 for + if 可以解决这里的问题,但它很乏味,我需要比较 8 列中的 2 列、8 列中的 3 列、8 列中的 4 列,在那种情况下,找到共享元素。

这是我到目前为止编写的代码...与我需要的相差甚远...我只是比较 8 个文件中的两个文件中的元素: code

有人能帮忙吗?

使用集合intersection可能会有帮助

for i in range(len(year_list)):
    datai=set(pd.read_csv('filename_'+year_list[i]+'.csv')['word'])
    tocompare=[]
    for j in range(i+1,len(year_list)):
        dataj=set(pd.read_csv('filename_'+year_list[j]+'.csv')['word'])
        print "Two files:",i,j
        print datai.intersection(dataj)
        tocompare.append(dataj)
    print "All compare:"
    print datai.intersection(*tocompare)
    break

第一个答案总体来说效果很好。但是由于某种原因,交集函数并没有 return 我预期的确切结果。所以我修改了提供的代码,以提高打印输出的准确性和格式。

for i in range(0,8):
otheryears = []
if i>0:
    for y in range(0,i):
        datay = set(pd.read_csv("most_50_common_words_"+year_list[y]+'.csv')["word"])
        for y in list(datay):
            if y not in otheryears:
                otheryears.append(y)     
uniquei = []
datai = set(pd.read_csv("most_50_common_words_"+year_list[i]+'.csv')["word"])
print "\nCompare year %d with:\n" % int(year_list[i])
for j in range(i+1,8):
    dataj = set(pd.read_csv("most_50_common_words_"+year_list[j]+'.csv')['word'])
    print year_list[j],':'
    listj = list(datai.intersection(dataj))
    print list(datai.intersection(dataj)),'\n',"%d common words with year %d" % (len(datai.intersection(dataj)),int(year_list[j]))
    for j in list(dataj):
        if j not in otheryears:
            otheryears.append(j)

common = []
for x in list(datai):
    if x in otheryears:
        common.append(x)   
print "\nAll compare:"
print "%d year has %d words in common with other years. They are as follows:\n%s" % (int(year_list[i]),
                                                                                     len(common),common),'\n'
for x in list(datai):
    if x not in otheryears:
        uniquei.append(x)
print "%d Frequent words unique in year %d:\n%s \n" % (len(uniquei),int(year_list[i]),uniquei)