如何過濾哪些列包含另一列? 例如,如果我們有兩列A,B的DT,我們可以用B.contains(A)過濾行嗎?不僅僅是如果B包含來自DT的所有A的一些A值,而且僅包含一行。熊貓,過濾器行中哪列包含另一列
A B 'lol' 'lolec' 'ram' 'rambo' 'ki' 'pio' Result: A B 'lol' 'lolec' 'ram' 'rambo'
如何過濾哪些列包含另一列? 例如,如果我們有兩列A,B的DT,我們可以用B.contains(A)過濾行嗎?不僅僅是如果B包含來自DT的所有A的一些A值,而且僅包含一行。熊貓,過濾器行中哪列包含另一列
A B 'lol' 'lolec' 'ram' 'rambo' 'ki' 'pio' Result: A B 'lol' 'lolec' 'ram' 'rambo'
可以使用boolean indexing
與apply
和in
形成的遮掩,如果需要過濾列A
和B
每行:
#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
謝謝,這是有用的。我沒有編碼問題。對於我來說,編碼在python 2.7中一直是個大問題。 –
是否可以切換到python 3?我6個月前換了,這是一個很好的決定。 – jezrael
我認爲是時候了:) –
您可以使用str.contains
通過使用正則表達式|
字符從所述其他系列的內容意味着一個OR
選擇以匹配每個子串的:
df[df['B'].str.contains("|".join(df['A']))]
什麼是輸出值是否'lolec'和'pio'是換? – jezrael
然後在結果中將只有第二行。 –
謝謝你,看我的答案。 – jezrael