2016-08-02 11 views
3

2つの列間の文字列を比較するとこの問題が発生しました。私がしたいのは、行ごとに、列Aが列Bに含まれているかどうかを確認し、そうであれば、列Cに新しい文字列 'Yes'を出力します。同じ列(行)でも異なる列の文字列を比較する

列AにはNaN値私が輸入したCSVの細胞)。

私が試してみました:

df['C']=df['B'].str.contains(df.loc['A']) 
df.loc[df['A'].isin(df['B']), 'C']='Yes' 

私は文字列を比較するための正しい方法を見つけることができなかったとして、彼らの両方が動作しませんでした。

+0

'のDF [' C '] =のDF A ']。ISIN(DFの[' '[DF df.loc ['[' B ']。str.contains(df.loc [' A '])' B '])、' C '] ='はい ' 編集:formating –

+1

このコメントであなたの編集をお知らせしようとしていますか? – bpachev

答えて

2

これはリストの理解度を使用しているため、最速の解決策ではないかもしれませんが、機能し、簡潔です。

df['C'] = pd.Series(['Yes' if a in b else 'No' for a,b in zip(df['A'],df['B'])]) 

EDIT:

df['C'] = pd.Series(['Yes' if a in b else c for a,b,c in zip(df['A'],df['B'], df['C'])]) 
+0

すばらしい答え! 「はい」のみを残し、他の人はそのままにしておきたい場合はどうすればよいですか?私は試しました: aの場合はa、bの場合はzip(df ['A']、df ['B'])aの場合 それは期待どおりに動作しませんでした –

+0

私は表示するように投稿を編集しますどうやって。 – bpachev

2
df = pd.DataFrame([['ab', 'abc'], 
        ['abc', 'ab']], columns=list('AB')) 

df['C'] = np.where(df.apply(lambda x: x.A in x.B, axis=1), 'Yes', 'No') 

df 

enter image description here

:あなたの代わりに 'いいえ' でそれらを上書きするのCの値を保持しない場合、あなたはこのようにそれを行うことができます
関連する問題