统计DataFrame行中指定子串的非精确匹配出现次数
实现Pandas DataFrame行级别子串匹配计数功能
核心实现函数
import pandas as pd def count_row_matches(df: pd.DataFrame, sub_str: str, case: bool = True) -> pd.Series: # 逐元素判断是否包含指定子串,非字符串类型、空值默认返回False contain_mask = df.astype(str).apply(lambda x: x.str.contains(sub_str, case=case, na=False)) # 按行求和得到每行匹配次数 row_match_count = contain_mask.sum(axis=1) return row_match_count
使用示例
# 构造示例测试数据 data = { "col1": ["abc", "xabc", "def", "xyzabcabczyd", "aaa"], "col2": ["abcd", "efg", "abc123", "hij", "bbb"], "col3": ["test", "abc", "qqq", "rrr", "abcabc"] } df = pd.DataFrame(data) # 查找子串"abc"的每行匹配次数 row_match_res = count_row_matches(df, "abc") print("每行匹配次数:\n", row_match_res) # 统计匹配成功的行总数(匹配次数≥1即算符合要求) valid_row_num = sum(row_match_res >= 1) print(f"匹配成功的行总数:{valid_row_num}")
上述示例运行后输出的匹配成功行总数为4,和需求中的示例结果一致。
参数说明
df: 输入的Pandas DataFrame对象sub_str: 需要查找的目标子串case: 布尔值,设置匹配时是否区分大小写,默认True区分大小写- 返回值:Pandas Series对象,索引和原DataFrame一致,值为对应行的子串匹配次数
注意:默认逻辑下同一单元格内子串多次出现仅算1次匹配,如果需要统计单个单元格内子串出现的总次数,可将代码中的
str.contains替换为str.count即可。
内容的提问来源于stack exchange,提问作者LePyka
相关产品推荐
相关产品推荐

