2016-10-18 3 views
3

Я пытаюсь создать все строки, в которых company1 в df содержится в company2. Я делаю это следующим образом:String Containment in Pandas

df1=df[['company1','company2']][(df.apply(lambda x: x['company1'] in x['company2'], axis=1) == True)] 

Когда я запускаю выше строки кода, он также показывает, «Юг» сопряженная с «Южный». Кроме того, «Юг» соответствует «Маршруту Юг». Я хочу избавиться от всех подобных случаев. Компания 1 должна содержаться только в начале Компании2. И компания1 не должна быть частью какого-либо слова в компании2, например, «Юг» (компания1), согласованная с «Южным» (компания2). Как мне изменить свой код для выполнения выше двух требований?

ответ

1

Я думаю, что вам нужно:

df = pd.DataFrame({'company1': {0: 'South', 1: 'South', 2:'South'}, 
        'company2': {0: 'Southern', 1: 'Route South', 2: 'South Route'}}) 

print (df) 
    company1  company2 
0 South  Southern 
1 South Route South 
2 South South Route 

df1=df[df['company2'].str.contains("|".join('^' + df['company1'] + ' '))] 
print (df1) 
    company1  company2 
2 South South Route 
+0

Я даже не хочу «Юг» сочетается с «Южный». Поскольку Юг не является отдельным словом в компании2, его часть Южного. – ComplexData

+0

Извините, пожалуйста, отредактируйте. – jezrael

+0

Я не знаю, почему, но это навсегда бежит. Строка кода, написанная мной в моем вопросе, хорошо работает, но мне просто нужно знать, как добавить эти два требования в свой кусок кода. – ComplexData