2017-02-20 68 views
2

我有兩個串系列這樣熊貓系列:選擇行詮釋從另一個系列的基於價值系列

>>> a = pd.Series(['a','b','c']) 
>>> b = pd.Series(['bb', 'a', 'dd', 'ee']) 
>>> a 
0 a 
1 b 
2 c 
dtype: object 
>>> b 
0 bb 
1  a 
2 dd 
3 ee 
dtype: object 

如果我想在「B」選擇在「A」相匹配的確切行的所有行我將使用此:

>>> a.loc[a.isin(b)] 
0 a 
dtype: object 

但如何選擇'a'中的所有行/字符串是'b'中的子字符串?我想這一點:

0 a 
1 b 
+0

這聽起來像你想用'type = inner'做一個'join' – Henry

回答

1

您可以檢查a中的元素是否爲b的子串apply方法:

a[a.apply(lambda x: b.str.contains(x).any())] 

#0 a 
#1 b 
#dtype: object 
3

你需要先用|ajoin價值創造表達什麼意思orregex,然後用containsb校驗值,最後使用boolean indexing過濾:

print ('|'.join(a)) 
a|b|c 

print (b.str.contains('|'.join(a))) 
0  True 
1  True 
2 False 
3 False 
dtype: bool 

print (a[b.str.contains('|'.join(a))]) 
0 a 
1 b 
dtype: object