2016-10-18 8 views
3

dfのcompany1がcompany2に含まれるすべての行を生成しようとしています。私は次のようにしています:パンダの文字列封じ込め

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

上記のコード行を実行すると、「南」と「南」が一致して表示されます。また、「South」は「Route South」と一致しています。私はそのような場合をすべて取り除きたい。 Company1はCompany2の初めにのみ含まれるべきです。そして、company1はcompany2の中で、 "south"(company1)と "south"(company2)が一致するような単語の一部であってはなりません。上記の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

私はなぜこれが永遠に実行されているのかわかりません。私の質問に書いたコード行はうまくいきますが、私はちょうど私のコードにこれら2つの要件をどのように加えるべきかを知る必要があります。 – ComplexData

関連する問題