Python: сравнение двух объектов Counter с разными ключами - PullRequest
0 голосов
/ 26 июня 2018

У меня есть две строки, которые я хочу составить с помощью tokenize, а затем сравнить их на различия

s1 = 'one two shmoo'
s2 = 'one one two'

Моей первой мыслью было преобразовать их оба в collections.Counter объекты, обернуть их в pd.Series и вычестьразница.

import pandas as pd
from collections import Counter
def counter_series(s):
    return pd.Series(Counter(s.split(' ')))

counter_series(s2) - counter_series(s1)

Но выходные данные показывают, что эта разница не обеспечивает подсчет слов, которых нет в обеих строках:

one      1.0
shmoo    NaN
two      0.0
dtype: float64

Как включитьнедостающие счета?Например, в выводе выше shmoo также должно быть 1. Решение не должно использовать pandas.

1 Ответ

0 голосов
/ 26 июня 2018

Используйте sub с fill_value = 0:

counter_series(s2).sub(counter_series(s1), fill_value=0)

Вывод:

one     -1.0
shmoo    1.0
two      0.0
dtype: float64

И вы можете добавить .abs (), чтобы получить абсолютное значение разностей:

counter_series(s2).sub(counter_series(s1), fill_value=0).abs()

Вывод:

one      1.0
shmoo    1.0
two      0.0
dtype: float64

Однако я бы использовал value_counts вместо импорта счетчиков из коллекций.

def count_series(x):
   s = pd.Series(x.split(' '))
   return s.value_counts()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...