Сравните значение в Dataframe и List - PullRequest
1 голос
/ 15 января 2020

Я делал LDA Model.

from helper import *  
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import gensim
from gensim.models import ldamodel
import gensim.corpora

#sp = split.astype('str')
text_list =  [i.split() for i in text]
#text_list = split[0]

train_headlines = [i.split() for i in text_list[0]];
num_topics = 10
id2word = gensim.corpora.Dictionary(train_headlines)
corpus = [id2word.doc2bow(text) for text in train_headlines]
lda = ldamodel.LdaModel(corpus=corpus, id2word=id2word, num_topics=num_topics)

def get_lda_topics(model, num_topics):
    word_dict = {}
    for i in range(num_topics):
        words = model.show_topic(i, topn = 50);
        word_dict['Topic # ' + '{:02d}'.format(i+1)] = [i[0] for i in words]
        #print(word_dict)
    return pd.DataFrame(word_dict)

topics_lda = get_lda_topics(lda, num_topics)

И в результате в dataframe # 1 содержится слово, подобное этому:


    Topic # 01   Topic # 02   Topic # 03   Topic # 04   Topic # 05   Topic # 06   Topic # 07   Topic # 08
0     mendapat    Kompascom          ini        resmi        dalam     jaringan         baru    KOMPAScom
1        dunia       secara        fakta         IFCN         lain      Network       selain           Di
2       selain       selain      Lembaga       secara    Kompascom       secara       secara      penguji
3          ada      Network    Kompascom    Kompascom          ini           49    Kompascom        dunia

, и я хочу проверить, является ли содержимое dataframe № 1 также находится в списке № 2. Ниже приведен список № 2:

['dalam', 'database', 'dilihat', 'sini', 'atau', 'bisa', 'hoaks', 'fakta', 'di', 'KOMPAScom']
['liputan6com', 'mafindo', 'itu', 'tirtoid', 'tempoco', 'lima', 'turnbackhoaxid', 'adalah', 'lembaga', 'dan']
['lembaga', 'checking', 'fact', '49', 'jaringan', 'ada', 'international', 'tersertifikasi', 'network', 'penguji']
['sumber', 'dijadikan', 'beritanya', 'pendanaan', 'partisan', 'non', 'sikap', 'dasar', 'transparan', 'mengutip']

Таким образом, результат будет:

'mendapat':0, 'Kompascom':0, 'ini': 0, 'resmi':0, 'dalam':1, 'jaringan':1, 'baru':0, 'KOMPAScom':1,.....

1, если текст находится в кадре данных и list, 0, если текст находится только в одном кадре данных или списке. Может кто-нибудь может помочь? Спасибо. Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Попробуйте этот код с isin:

l = ['dalam', 'database', 'dilihat', 'sini', 'atau', 'bisa', 'hoaks', 'fakta', 'di', 'KOMPAScom', 'liputan6com', 'mafindo', 'itu', 'tirtoid', 'tempoco', 'lima', 'turnbackhoaxid', 'adalah', 'lembaga', 'dan', 'lembaga', 'checking', 'fact', '49', 'jaringan', 'ada', 'international', 'tersertifikasi', 'network', 'penguji', 'sumber', 'dijadikan', 'beritanya', 'pendanaan', 'partisan', 'non', 'sikap', 'dasar', 'transparan', 'mengutip']
print(dict(zip(df.values.flatten().tolist(), df.isin(l).astype(int).values.flatten().tolist())))

Вывод:

{'mendapat': 0, 'Kompascom': 0, 'ini': 0, 'resmi': 0, 'dalam': 1, 'jaringan': 1, 'baru': 0, 'KOMPAScom': 1, 'dunia': 0, 'secara': 0, 'fakta': 1, 'IFCN': 0, 'lain': 0, 'Network': 0, 'selain': 0, 'Di': 0, 'Lembaga': 0, 'penguji': 1, 'ada': 1, '49': 1}
0 голосов
/ 15 января 2020

Соберите все значения в вашем фрейме данных в наборе и сравните с набором элементов сравнения.

import pandas as pd
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})

print(df)

# use set comprehension to "flatten" the nested list that comes from df.values
df_values = {item for sublist in df.values for item in sublist}
print(df_values)
compares = {1,4,9}

# find the items that are in both
print(compares & df_values)

# find the items that are only in the compares set
print(compares - df_values)

Производит:

   a  b
0  1  4
1  2  5
2  3  6

{1, 2, 3, 4, 5, 6}

{1, 4}

{9}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...