python计算字符串在数据帧的整行中出现的次数

python计算字符串在数据帧的整行中出现的次数,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,我有一个问题是基于我先前的回答。下面的代码运行正常,它告诉我整行中是否存在搜索字符串。如何修改最后一行,使其提供匹配计数,而不是1或0?例如,对于第一行,它应该返回4,因为我的search\u字符串存在于该行的4个位置 sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'}, {'account': 'Alpha Co', 'Jan': 'Jon

我有一个问题是基于我先前的回答。下面的代码运行正常,它告诉我整行中是否存在
搜索字符串。如何修改最后一行,使其提供匹配计数,而不是1或0?例如,对于第一行,它应该返回4,因为我的
search\u字符串
存在于该行的4个位置

sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]
df = pd.DataFrame(sales)
df

search_string = 'Jones'

(df.apply(lambda x: x.str.contains(search_string))
                       .sum(axis=1).astype(int))

您可以使用
findall
.str.len

sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]
df = pd.DataFrame(sales)
df

search_string = 'jones' #Note changed to lowercase j to find more data.

(df.apply(lambda x: x.str.findall(search_string).str.len())
                       .sum(axis=1).astype(int))
输出:

0    3
1    0
2    0
dtype: int32
0    4
1    1
2    0
dtype: int32

将@Vaishali edit添加到解决方案:

df.apply(lambda x: x.str.lower().str.findall(search_string).str.len()).sum(axis=1).astype(int)
输出:

0    3
1    0
2    0
dtype: int32
0    4
1    1
2    0
dtype: int32

您可以使用
findall
.str.len

sales = [{'account': 'Jones LLC jones', 'Jan': '150', 'Feb': '200', 'Mar': '140 jones jones'},
         {'account': 'Alpha Co',  'Jan': 'Jones', 'Feb': '210', 'Mar': '215'},
         {'account': 'Blue Inc',  'Jan': '50',  'Feb': '90',  'Mar': '95' }]
df = pd.DataFrame(sales)
df

search_string = 'jones' #Note changed to lowercase j to find more data.

(df.apply(lambda x: x.str.findall(search_string).str.len())
                       .sum(axis=1).astype(int))
输出:

0    3
1    0
2    0
dtype: int32
0    4
1    1
2    0
dtype: int32

将@Vaishali edit添加到解决方案:

df.apply(lambda x: x.str.lower().str.findall(search_string).str.len()).sum(axis=1).astype(int)
输出:

0    3
1    0
2    0
dtype: int32
0    4
1    1
2    0
dtype: int32

使用前面的代码,我们简单地将
any
方法更改为
sum
方法。将所有1相加,以有效地计算给定行中出现的次数(轴=1)


使用前面的代码,我们简单地将
any
方法更改为
sum
方法。将所有1相加,以有效地计算给定行中出现的次数(轴=1)


为什么第二排没有返回1?第2列的第2行具有Jones@Ni_Tempe请参见带有Vaishali修改的Update为什么在第二行没有返回1?第2列的第2行具有Jones@Ni_Tempe请参阅Update with Vaishali modificationI我使用了搜索字符串“jones”,但在这个问题中提到的数据框中没有返回4。此搜索是否覆盖所有列?@Ni_Tempe是的,
axis=1
部分应确保它是按行应用的。可能是在实际的
DataFrame
中有非字符串或对象类型的列,这会忽略它们。我想这可能会引发一个错误。我使用了搜索字符串“jones”,但在这个问题中提到的数据框中它没有返回4。此搜索是否覆盖所有列?@Ni_Tempe是的,
axis=1
部分应确保它是按行应用的。可能是在实际的
DataFrame
中有非字符串或对象类型的列,这会忽略它们。我想这会引发一个错误。