2016-10-18 3 views
1

2つのデータフレームの会社名のマッチング(一種のファジーマッチング)を行っています。そのためには、最初に、開始アルファベットが一致するすべての会社名を完全にマージしています。つまり、「A」で始まるすべての企業は、他のデータフレームで「A」で始まるすべての企業と一致します。これは、次のように行われます。パンダの機能が含まれています

df1['df1_Start'] = df1['company1'].astype(str).str.slice(0,2) 
df2['df2_Start'] = df2['company2'].astype(str).str.slice(0,2) 
Merge = pd.merge(df1,df2, left_on='df1_Start',right_on='df2_Start') 

は今、私はDF1で、同社がDF2で会社が含まれていFullMergeからすべての行を持っていると思います。これは、df1の企業が細長い名前を持つためです。

Merge1=Merge[Merge['company1'].str.contains(Merge['company2'].str)] 

これは私にとっては機能しません。このタスクを実行するにはどうすればよいですか?また、会社名と一致させるために他にどのような方法を使用することを提案してください。企業は2つのデータフレームで同じであるかもしれないが、まったく同じ方法で書かれていないからです。

答えて

1

私はあなたがstr.containsため|(またはregex中)で区切られたすべての値を生成するためのjoin|が必要だと思う:

Merge1=Merge[FullMerge['company1'].str.contains("|".join(Merge['company2'].tolist())] 
+0

ありがとう!どのように私はこれを変更することができますcompany1は、最初のcompany2のみを含む必要がありますが、中央のどこかに?上記は私にかなりの誤認を与えているからです。 – ComplexData

+0

あなたは '^' - regex startが必要だと思います。-Merge1 = Merge [FullMerge ['company1']。str.contains( "|" .join(Merge ['^' + 'company2']。tolist() )] '' – jezrael

関連する問題