считать совпадения между двумя списками в разных фреймах данных python - PullRequest
1 голос
/ 20 июня 2019

Я хочу посчитать, как часто слово из одного списка в кадре данных находится в другом списке в другом кадре данных. Мои данные выглядят так:

df6=pd.DataFrame({'variable':'irreplacable','Words':[['hi','ciao'],
['mine','yours']]})
df7=pd.DataFrame({'text':[['hi','is','this','ciao','ciao'],['hi','ciao']]})

Итак, теперь я хочу посчитать, как часто в каждой ячейке df7.text присутствуют 'hi' и 'ciao', и создать новый столбец в df7, связывающийся с этим числом

Я пытался создать «двойной» цикл:

count_word = 0
for index,rows in df7.iterrows():
    for word in df7.text:
        if word in df6.iloc[0,1]:
            count_word = count_word +1
    df7['counter']=count_word

с этим кодом вывод выглядит как

   text                        counter
0  [hi, is, this, ciao, ciao]   0
1  [hi, ciao]                   0

вместо 3 и 2 для счетчика

1 Ответ

1 голос
/ 20 июня 2019

Использовать генератор с sum для счетчика True значение с in для тестового членства:

df7['counter']= df7.text.apply(lambda x: sum(i in df6.iloc[0,1] for i in x))
print (df7)
                         text  counter
0  [hi, is, this, ciao, ciao]        3
1                  [hi, ciao]        2

Немного изменить решение для проверки всех других значений на новые столбцы:

for v in df6['Words']:
    df7[', '.join(v)]= df7.text.apply(lambda x: sum(i in v for i in x))
print (df7)

                         text  hi, ciao  mine, yours
0  [hi, is, this, ciao, ciao]         3            0
1                  [hi, ciao]         2            0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...