Предположим, у нас есть следующий кадр данных:
import pandas as pd
df = pd.read_csv('subjects.csv')
Col A, Interest, Col Start, Col Go, Col Learn,
Learn English Lit
Go Mathematics
Start Science
Learn Science
Go English
Start Math
Learn Math
Go Biology
Start English
Я написал некоторый код для извлечения интересов из аналогичного набора данных следующим образом
#Map Interests
Mapper = ['English', 'Math', 'Maths', 'Mathematics', 'Biology', 'Science']
#Join Mapper to Interest Column
pat = '|'.join(r"\b{}\b".format(x) for x in Mapper)
df['interest'] = df['col A'].str.extract('('+ pat + ')', expand=False)
#Align Interest Names by creating a dict and replacing values
enter code here
d = {'English Lit' : 'English', 'Biology' : 'Science', 'Mathematics' : 'Maths'}
df['Interests'] = df['Interests'].replace(d, inplace=False)
>>> Output:
Col A, Interest, Col Start, Col Go, Col Learn,
Learn English Lit English
Go Mathematics Maths
Start Science Science
Learn Science Science
Go English English
Start Math Maths
Learn Math Maths
Go Biology Science
Start English English
Теперь мне нужно измерить вовлеченность полковника А с помощью ключевого слова и интереса.
Я сделал это следующим образом, но я уверен, что есть лучшие способы сделать это.
df['Col Start'][df['col A'].str.contains("Learn", na=False) & df['interest'].str.contains("Science")] = 'Learn'
Кроме того, что было бы лучшим способом добавить несколько значений в один столбец? например, если бы я имел:
Col A
Learn Science, Math, Biology.
Я бы хотел, чтобы ключевое слово + проценты отображалось в новый столбец со значениями, разделенными запятыми. Вот где мои текущие сценарии распадаются, он записывает поверх новых значений предыдущие, где я пытался охватить все уровни взаимодействия (если это имеет смысл ..)
Col A Col B
Learn Science, Math, Biology. Learn S, Learn, M, Learn B
Любая помощь будет благодарна. (пожалуйста, будьте осторожны, я начал кодировать в феврале!)
Редактировать для ясности:
df.loc[df['col A'].str.contains("Learn", na=False) & df['interest'].str.contains("Science"), 'Col Start'] = 'Learn S'
df.loc[df['col A'].str.contains("Learn", na=False) & df['interest'].str.contains("English"), 'Col Start'] = 'Learn E'
df.loc[df['col A'].str.contains("Learn", na=False) & df['interest'].str.contains("Math"), 'Col Start'] = 'Learn M'
Col A Col Learn
Learn Science, Math Learn S, Learn M
Learn Math, English Learn M, Learn E
Learn Science Learn S.
Возможно, в моем DF Col A & Interest может перекрываться и иметь повторяющиеся результаты. То, что я хочу, чтобы захватить их всех и не перезаписывать их, а добавлять любые новые вводы с запятой