Получить сумму счета и сделать вычитание счетчика питона - PullRequest
0 голосов
/ 17 октября 2018

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

df = pd.read_excel('C:/Test.xlsx')
df.drop_duplicates(['Content'],inplace=True)
a = df['Content'].str.lower()
searchfor =['heating','lagging',... and 100+words]
opposite = ['no heating','no lagging',...and 100+words]
b = a[a.str.contains(searchfor)]
c = a[a.str.contains(opposite)]

например, в Контенте, у меня есть предложения [«Телефон нагревается, но не отстает», «Телефон не нагревается и не отстает» ...] Первое предложениесодержит 2 слова в searchfor и 1 слово напротив.Второе предложение содержит 2 слова из searchfor и 2 слова из противоположного.То, что я хочу сделать, это посчитать сумму количества слов как в поиске, так и в обратном.Затем (сумма ключевых слов в поиске за вычетом суммы ключевых слов в обратном. Если ноль, верните предложения.

Вот то, что я пытался, но это не работает

d = c.str.split()
def check_it(sentences):
   find_words = []
   for word in searchfor:
        if word in sentences:
            find_words.append(d.count(word))
   return sentences
d = d.apply(lambda x:check_it(x))

и сделатьеще один def проверь его. Он не работает и выдает ошибку.

Я буду благодарен, если кто-нибудь сможет помочь

1 Ответ

0 голосов
/ 17 октября 2018

[Использование Python 3, требуется Pandas]

Было бы хорошо увидеть образец ваших фактических данных, однако, я предполагаю, что ваш фрейм данных будет иметь образец, как показано ниже (Пожалуйста, исправьте меня, если этоэто не так):

+-----+----------------------------------------+
|index|content                                 |
+-----+----------------------------------------+
|0    |the phone is heating but not lagging    |
|1    |the phone is not heating and not lagging|
+-----+----------------------------------------+

Теперь мы создаем функцию для использования в качестве лямбды следующим образом:

def get_difference_of_keywords(content_string, searchfor, opposite):
    searchfor_matches = len([keyword for keyword in searchfor if keyword in content_string])
    opposite_matches = len([keyword for keyword in opposite if keyword in content_string])
    difference = searchfor_matches - opposite_matches
    if not difference == 0:
        return str(difference)
    return content_string

При этом используется понимание списка Python для получения количества совпадений'searchfor' и 'противоположный' затем возвращает разницу, если разница не равна нулю, или исходное входное предложение, если разница равна нулю.

Примечание. Я преобразовал возвращаемое число из разности выше нуля в строку, чтобы убедиться, что в новых столбцах нет смешанных типов данных.Это необязательно и зависит от вас.

Затем мы применяем вышеуказанное:

df['get_difference_result'] = df.apply(
    lambda row: get_difference_of_keywords(row['content'], searchfor, opposite),
    axis=1
)

, что приведет к следующему:

+-----+----------------------------------------+----------------------------------------+
|index|content                                 |get_difference_result                   
|
+-----+----------------------------------------+----------------------------------------+
|0    |the phone is heating but not lagging    |1                                       |
|1    |the phone is not heating and not lagging|the phone is not heating and not lagging|
+-----+----------------------------------------+----------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...