我有一个基于我之前的问题question https://stackoverflow.com/questions/48330608/pandas-dataframe-search-sting-in-the-entire-row。下面的代码运行良好,它告诉我是否search_string
是否存在于整行中。我如何修改最后一行,以便它为我提供匹配项计数,而不是 1 或 0?例如,对于第一行,它应该返回 4 作为我的search_string
存在于该行的 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
and .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))
Output:
0 3
1 0
2 0
dtype: int32
将 @Vaishali 编辑添加到解决方案中:
df.apply(lambda x: x.str.lower().str.findall(search_string).str.len()).sum(axis=1).astype(int)
Output:
0 4
1 1
2 0
dtype: int32
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)