Попробуйте следующий код:
df - ваш первый кадр данных, df1 - второй
res = pd.DataFrame()
for text in df1.TEXT_DATA:
res = res.append(
df[df.apply(lambda row: row.KEYWORD in text or
text in row.KEYWORD, axis=1)]
)
print(res)
Вывод:
KEYWORD TICKET
0 Burst of bit errors 89814
3 wires stop passing traffic 60245
Здесьеще один способ сделать это, чтобы получить
точно такой же, как и ожидаемый результат:
res = pd.DataFrame(columns=['KEYWORD', 'TICKET', 'sentenced_data']) # create an empty dataframe to store the answer
for text in df1.TEXT_DATA: # loop-through the second dataframe
bools = df.apply(lambda row: row.KEYWORD in text or text in row.KEYWORD, axis=1) # return a boolean series if KEYWORD contains(by the "in" keyword in python) text or text contains KEYWORD
if (bools.any()): # filter the df by the boolean series, append it to res, append the text to second column
res = res.append(df[bools])
res.iloc[-bools.sum():, 2] = text
res = res[['KEYWORD', 'sentenced_data', 'TICKET']]
print(res)
Вывод:
KEYWORD sentenced_data TICKET
0 Burst of bit errors Burst of bit errors due to 89814
3 wires stop passing traffic stop passing traffic 60245
in
ключевое слово в pythonвернет
True
, если два
string
частично совпадают или 100% совпадают;в противном случае возвращается
False
.