我想知道每行中有多少个单元格包含具有特定字符的字符串。例如:
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()
但似乎我应该找到一个更简单的解决方案。
答案 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