查找包含特定字符的字符串的单元格数

时间:2017-05-10 17:30:06

标签: python pandas

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

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适用于系列,而不适用于DataFrame。我可以单步执行索引并执行类似

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

但似乎我应该找到一个更简单的解决方案。

2 个答案:

答案 0 :(得分:2)

<强>更新

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 :(得分: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