Сопоставить значение столбца данных на основе элементов списка и вместо этого вернуть элемент списка - PullRequest
0 голосов
/ 05 марта 2020

У меня есть фрейм данных, и я хочу, чтобы значения одного столбца проверялись, если они совпадают со значениями списка. Моя первоначальная попытка:

dataframe = pd.DataFrame({'Description': ['foo blah', 'new foo', 'newfoo', 'bar','random']})
keywords_list = ["foo", "bar"]

dataframe = dataframe['Description'].str.split(expand = True).isin(keywords_list).any()

print(dataframe)

, где я хочу, чтобы в фрейме данных ['Description'] были значения, совпадающие со списком keyword_list. Что-то вроде замены. Ничего из следующего не сработало:

dataframe['Description'] = [x.strip().replace(' ', keywords_list[x]) for x in dataframe['Description']]

или

dataframe['Description'] = np.where(df['Description'].isin(keywords_list), df['Site'], '')

Итак, исходный кадр данных:

  Description
0    foo blah
1     new foo
2      newfoo
3         bar
4      random

теперь должен возвращать:

  Description
0    foo
1    foo
2    foo
3    bar
4    random

1 Ответ

0 голосов
/ 05 марта 2020

Я бы построил вспомогательный фрейм данных с одним столбцом для каждого ключевого слова, чтобы иметь возможность перебирать список и подготавливать ожидаемый результат.

Этого было бы достаточно, чтобы сначала использовать объединение в этих столбцах, чтобы получить ожидаемый результат:

dataframe = pd.DataFrame({'Description': ['foo blah', 'new foo', 'newfoo', 'bar','random']})
keywords_list = ["foo", "bar"]

# compute a tmp dataframe with a column per keyword and having the keyword
#  as value is there is a match
tmp = pd.DataFrame(index = dataframe.index)
for k in keywords_list:
    tmp.loc[dataframe['Description'].str.contains(k), k] = k

# compute the result by combining all the keyword columns
tmp['resul'] = np.nan
for k in keywords_list:
    tmp['resul'] = tmp['resul'].combine_first(tmp[k])

# update the initial dataframe
dataframe['Description'] = tmp['resul'].combine_first(dataframe['Description'])

Дает ожидаемый результат:

  Description
0         foo
1         foo
2         foo
3         bar
4      random
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...