2017-05-10 84 views
1

我想知道每行中有多少个单元格包含具有特定字符的字符串。例如:查找包含特定字符的字符串的单元格数

d = {'a':[1,2,'abc','ace'],'b':['aa','bb','cc',5],'c':['zzz','byy','xxx','wwb']} 
df = pd.DataFrame(d, index=['m','n','o','p']) 
df 

    a b c 
m 1 aa zzz 
n 2 bb byy 
o abc cc xxx 
p ace 5 wwb 

我想知道,包含一个 “B” 每行中的细胞数量:

a b c Count 
m 1 aa zzz 0 
n 2 bb byy 2 
o abc cc xxx 1 
p ace 5 wwb 1 

str.contains的系列作品,而不是DataFrames。我可以逐步通过指数和做一些像

df.loc['m','Count'] = df.loc['m'].str.contains('b').sum() 

,但它好像应该是我的思念,现在一个更简单的解决方案。

回答

2

UPDATE:

In [60]: df.apply(lambda x: x.str.contains('b')).sum(1) 
Out[60]: 
m 0.0 
n 2.0 
o 1.0 
p 1.0 
dtype: float64 

In [57]: df.apply(lambda x: x.str.contains('b').sum(), axis=1) 
Out[57]: 
m 0 
n 2 
o 1 
p 1 
dtype: int64 

算多少b有每一行:

In [50]: df.astype(str).sum(axis=1).str.count('b') 
Out[50]: 
m 0 
n 3 
o 1 
p 1 
dtype: int64 
1

另一种解决方案使用applymap:

df['Count'] = np.sum(df.applymap(lambda x: 'b' in str(x)),1) 

df 
Out[99]: 
    a b c Count 
m 1 aa zzz  0 
n 2 bb byy  2 
o abc cc xxx  1 
p ace 5 wwb  1 
相关问题