Поиск в серии по слову. Вернуть это слово и еще N в новый столбец? - PullRequest
0 голосов
/ 27 мая 2020

Хорошо, мне нужна помощь. Я создал функцию для поиска в строке определенного c слова. Если функция находит search_word, она вернет слово the и N слов, предшествующих ему. Функция отлично работает с моими тестовыми строками, но я не могу понять, как применить ее ко всей серии?

Моя цель - создать новый столбец во фрейме данных, который будет содержать n_words_prior всякий раз, когда существует search_word.

n_words_prior = []
test = "New School District, Dale County"

def n_before_string(string, search_word, N):
    global n_words_prior 
    n_words_prior = []
    found_word = string.find(search_word)
    if found_word == -1: return ""
    sentence= string[0:found_word]
    n_words_prior = sentence.split()[N:]
    n_words_prior.append(search_word)
    return n_words_prior

текущий фрейм данных выглядит следующим образом:

data = [['Alabama', 'New School District, Dale County'], 
        ['Alaska', 'Matanuska-Susitna Borough'], 
        ['Arizona', 'Pima County - Tuscon Unified School District']]
df = pd.DataFrame(data, columns = ['State', 'Place']) 

Улучшенная функция будет принимать входные данные 'Place', 'County', -1 и создавать следующий результат.

improved_function(column, search_word, N)

new_data = [['Alabama', 'New School District, Dale County','Dale County'], 
        ['Alaska', 'Matanuska-Susitna Borough', ''], 
        ['Arizona', 'Pima County - Tuscon Unified School District','Pima County']]
new_df = pd.DataFrame(new_data, columns = ['State', 'Place','Result']) 

Я думал, что встраивание этой функции поможет, но это только усложнило ситуацию.

def fast_add(place, search_word):
    df[search_word] = df[Place].str.contains(search_word).apply(lambda search_word: 1 if search_word == True else 0)

1 Ответ

0 голосов
/ 27 мая 2020
def fun(sentence, search_word, n):
    """Return search_word and n preceding words from sentence."""
    words = sentence.split()
    for i,word in enumerate(words):
        if word == search_word:
            return ' '.join(words[i-n:i+1])
    return ''

Пример:

df['Result'] = df.Place.apply(lambda x: fun(x, 'County', 1))

Результат:

     State                                         Place       Result
0  Alabama              New School District, Dale County  Dale County
1   Alaska                     Matanuska-Susitna Borough             
2  Arizona  Pima County - Tuscon Unified School District  Pima County
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...