Создать новый столбец на основе текстового списка - PullRequest
0 голосов
/ 09 июля 2020

У меня есть список со спортом, например:

sports = ["basketball", "football", "baseball"]

и фрейм данных с одним столбцом с некоторыми предложениями,

column_1
df
My favourite sport is football
I love to play basketball
Football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal

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

df                                                    other
My favourite sport is football                        football
I love to play basketball                             basketball
Football is a family of team sports that involve..    football

Я не хочу использовать оператор if, потому что мой список содержит почти 50 разных слов. Спасибо.

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Используйте это. Это просто и легко понять -

df['other'] = df['column1'].apply(lambda x: list(set(x.lower().split()).intersection(set(sports)))[0])
  1. Здесь применяется функция, которая сначала опускает, а затем разбивает предложения на слова.
  2. Затем выполняется пересечение множества слова в предложении и набор слов в списке видов спорта.
  3. Если каждое предложение может содержать более одного вида спорта, удалите [0] в конце, чтобы получить список видов спорта
    column1                         other
0   My favourite sport is football  football
1   I love to play basketball       basketball
2   Football is a family of t...    football
1 голос
/ 09 июля 2020

попробуйте это, str.extract

import re

sports = ["basketball", "football", "baseball"]

extract_ = re.compile("(%s)" % "|".join(sports), re.IGNORECASE)
df['extract'] = df.column_1.str.extract("(%s)" % "|".join(sports))

0    football
1  basketball
2    Football
0 голосов
/ 09 июля 2020
df = pd.DataFrame()

df['column_1'] = ['My favourite sport is football', 'I love to play basketball', 'Football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal']

sports = ["basketball", "football", "baseball"]

list_output = []

for i in range(len(df)):
    
    sentence = df['column_1'].iloc[i]
    for s in sports:
        if s.lower() in sentence.lower(): #s.lower is to avoid missing entries because they're upper case. So I'm comparing then all as lower case
            list_output.append(s)
    
df['sport'] = list_output

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...