#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я пытаюсь получить количество содержимого одного столбца во втором столбце в pandas. Я хотел бы поместить количество частот в новый столбец с именем frequency.
Я хотел бы найти, сколько раз строка в моем столбце [Ключевое слово] встречается в столбце [Описание] в новом столбце с именем [Частота].
Желаемый результат
[keyword] [Description] [Frequency]
car car dog car car 3
car car dog dog dog 1
new car old car car dog 0
Код, который я пробовал
Я попробовал следующий код, но возникли две проблемы. (Количество частот не было точным, а форматирование было совершенно неправильным).
s = df['Keyword']
pat = r'b{}b'.format('|'.join(s))
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df_new = pd.DataFrame(mlb.fit_transform(df['Description'].str.findall(pat)),
columns=mlb.classes_,
index=df.index).reindex(columns=s, fill_value=0)
Ответ №1:
Используйте это, если вам нужны точные совпадения слов:
df['frequency'] = [len(re.findall(rf'b{k}b', d)) for k, d in zip(df['keyword'], df['Description'])]
print(df)
Вывод
keyword Description frequency
0 car car dog car car 3
1 car car dog dog dog 1
2 new car old car car dog 0
Лучшей альтернативой, предложенной @jezrael, является:
df['frequency'] = [len(re.findall(rf'b{k}b', d)) for k, d in df[['Description', 'keyword']].to_numpy()]
Ответ №2:
Если точное совпадение не имеет значения count
, это означает, что carito
в описании оно совпадает car
. Если нужно избежать этого, используйте @Dani Mesejo
answer.
df['new'] = df.apply(lambda x: x['Description'].count(x['keyword']), axis=1)
print (df)
keyword Description Frequency new
0 car car dog car car 3 3
1 car car dog dog dog 1 1
2 new car old car car dog 0 0