2017-01-24 4 views
3

どの列に別の列が含まれている行をフィルタリングできますか? たとえば、DTが2つの列A、Bを持つ場合、Bcontains(A)で行をフィルタリングできますか? BにDTからのすべてのAからのA値が1つの行に含まれているだけでなく、パンダ、列に別の列が含まれている行をフィルタリングする

 
A  B 
'lol' 'lolec' 
'ram' 'rambo' 
'ki' 'pio' 

Result: 
A  B 
'lol' 'lolec' 
'ram' 'rambo' 
+0

:他のシリーズのコンテンツからOR選択を意味正規表現|文字を使用して、サブストリングの各々に合わせてスワップ? – jezrael

+0

結果は2行目になります。 –

+0

ありがとう、私の答えを参照してください。 – jezrael

答えて

1

あなたはapplyinによって作成されたマスクでboolean indexingを使用することができ、行ごとの必要性フィルタ列AB場合:

ソリューションの違い
#if necessary strip ' in all values 
df = df.apply(lambda x: x.str.strip("'")) 
#df = df.applymap(lambda x: x.strip("'")) 

print (df.apply(lambda x: x.A in x.B, axis=1)) 
0  True 
1  True 
2 False 
dtype: bool 

df = df[df.apply(lambda x: x.A in x.B, axis=1)] 
print (df) 
    A  B 
0 lol lolec 
1 ram rambo 

- 入力DataFrameが変更された:

print (df) 
    A  B 
0 lol pio 
1 ram rambo 
2 ki lolec 

print (df[df.apply(lambda x: x.A in x.B, axis=1)]) 
    A  B 
1 ram rambo 

print (df[df['B'].str.contains("|".join(df['A']))]) 
    A  B 
1 ram rambo 
2 ki lolec 
+0

ありがとう、これは便利です。私はエンコーディングにほとんど問題がありません。 Python 2.7ではエンコーディングが常に大きな問題でした。 –

+0

python 3に切り替えることはできますか?私は6ヶ月前に切り替えました。それは良い判断でした。 – jezrael

+0

私はそれが時間だと思う:) –

4

を使用できます値 `lolec`と` pio`である場合、出力は何

df[df['B'].str.contains("|".join(df['A']))] 

enter image description here

関連する問題