2017-07-07 26 views
0

次の操作で、あるデータフレーム列の列内の文字列が別のデータフレームの指定された列にある場所を示すステータスを追加できます。Pandasシリーズ値の大文字と小文字を区別しない一致と部分一致

df_one['Status'] = np.where(df_one.A.isin(df_two.A), 'Matched','Unmatched') 

これは文字列の大文字と小文字が異なる場合は一致しません。大文字と小文字を区別しないでこの操作を実行できますか? df_one.Aの値がdf_two.Aからの完全な文字列で終了した場合

また、リターン「一致した」可能ですか?例えばdf_one.A abcdefghijkl - > df_two.A ijkl = 'Matched'

+1

通常は、str.casefoldこれのために私はそれのベクトル化されたバージョンがないと思います。代わりに 'df_one ['A']を試すことができます。str.lower()。isin(df_two ['A']。str.lower())' – ayhan

答えて

1

最初のテストは、式の中で両方の文字列を小文字または大文字に変換することで実行できます(どちらの列もあなたのデータフレーム、ケースの変換は)一時的なもので:

df_one['Status'] = np.where(df_one.A.str.lower().isin(df_two.A.str.lower()), 'Matched','Unmatched') 

あなたがそう(まだあなたを想定したように、df_one.Aの各文字列はdf_two.A内の文字列のいずれかで終わるかどうかを確認することで、あなたの第二の試験を行うことができます大文字と小文字を区別しない一致が必要です):

df_one['Endswith_Status'] = np.where(df_one.A.str.lower().apply(lambda x: any(x.endswith(i) for i in df_two.A.str.lower())), 'Matched','Unmatched') 
関連する問題