Python 在匹配字符串时跨行的条件计数

Python 在匹配字符串时跨行的条件计数,python,pandas,count,conditional,Python,Pandas,Count,Conditional,我有一个数据帧的形式,df= index,result1,result2,result3 0 s u s 1 u s u 2 s 3 s s u 例如,我想添加另一列,该列包含s在该行中出现的次数列表 index,result1,result2,result3,count 0 s u

我有一个数据帧的形式,df=

index,result1,result2,result3 
  0     s       u       s     
  1     u       s       u   
  2     s                     
  3     s       s       u 
例如,我想添加另一列,该列包含s在该行中出现的次数列表

index,result1,result2,result3,count 
  0     s       u       s      2
  1     u       s       u      1
  2     s                      1
  3     s       s       u      2
我尝试了以下代码

col=['result1','result2','result3']
df[cols].count(axis=1)
但这又回来了

0,3
1,3
2,1
3,3
所以这会计算元素的数量,我试着

df[df[cols]=='s'].count(axis=1)
但这返回了以下错误:“无法将['s']与块值进行比较”


如果您有任何帮助,我们将不胜感激。

对于我来说,通过数字将作品转换为
字符串
,并且
NaN
列返回您的
错误

print (df)
   index result1 result2  result3  result4
0      0       s       u        7      NaN
1      1       u       s        7      NaN
2      2       s     NaN        8      NaN
3      3       s       s        7      NaN
4      4     NaN     NaN        2      NaN

print (df.dtypes)
index        int64
result1     object
result2     object
result3      int64
result4    float64
dtype: object

cols = ['result1','result2','result3','result4']
df['count'] = df[df[cols].astype(str) == 's'].count(axis=1)
print (df)
   index result1 result2  result3  result4  count
0      0       s       u        7      NaN      1
1      1       u       s        7      NaN      1
2      2       s     NaN        8      NaN      1
3      3       s       s        7      NaN      2
4      4     NaN     NaN        2      NaN      0
或仅
布尔掩码中的
真值

print (df[cols].astype(str) == 's')

  result1 result2 result3 result4
0    True   False   False   False
1   False    True   False   False
2    True   False   False   False
3    True    True   False   False
4   False   False   False   False

cols = ['result1','result2','result3','result4']
df['count'] = (df[cols].astype(str) =='s').sum(axis=1)
print (df)
   index result1 result2  result3  result4  count
0      0       s       u        7      NaN      1
1      1       u       s        7      NaN      1
2      2       s     NaN        8      NaN      1
3      3       s       s        7      NaN      2
4      4     NaN     NaN        2      NaN      0
另一个不错的解决方案来自-use
numpy

df['count'] = (df[cols].values=='s').sum(axis=1)

这里缺少哪些值?它们是空白字符串还是
NaN
df.info()
显示了什么<如果您有所有str或混合数据类型,则代码>df='s'将起作用,但如果您有任何纯数字列或行,则此操作将不起作用,如果您有任何行具有all
NaN
则会发生此情况,您可以尝试
df.fillna('',inplace=True)
然后
(df[cols]='s')。计数(axis=1)
应work@WGP,也许,
df['count']=(df[cols].values=='s').sum(1)
会是一个不错的选择吗?