Извлечь общие элементы в нескольких списках
В общем, я хочу извлечь общие элементы из колонки общего доступа "word" в нескольких CSV-файлах. (2008.csv, 2009.csv, 2010.csv .... 2015.csv)
Все файлы имеют одинаковый формат: "слово", "количество"
"слово" содержит все частые слова в одном документе за определенный год.
вот снимок одного из файлов:
Поскольку есть два из восьми файлов, имеющих общие элементы, я хочу знать, какие элементы общего доступа и в каких файлах они находятся (это очень похоже на вычисление tfidf... кстати)
В любом случае, моя цель - узнать некоторые тенденции появления часто встречающихся слов в этих файлах. (Насколько мне известно, один элемент может быть не более пяти файлов.)
И я хочу знать слова, когда они появляются впервые, что означает слово в файле C, но не в файлах B и A.
Я знаю, что если + может решить проблему здесь, но это довольно утомительно, мне нужно сравнить 2 из 8, 3 из 8, 4 из 8... столбцов, в этом случае, чтобы найти общие элементы.
это код, который я разработал до сих пор... далеко от того, что мне нужно... я просто сравниваю элементы в двух из 8 файлов: код
Кто-нибудь может помочь?
2 ответа
Используйте набор 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
Первый ответ сработал в целом. Но функция пересечения не возвращает точные результаты, которые я ожидал по какой-то причине. Поэтому я изменил предоставленный код для большей точности и лучшего форматирования распечаток.
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)