You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何逐行统计指定列字符在另一列字符串中的出现次数

问题原因

pandas的Series.str.count()是向量化字符串方法,设计上仅接收单个固定匹配模式(字符串/编译后的正则对象)作为入参,会把这个模式统一应用到Series的所有元素上做统计,原生不支持直接传入等长的Series作为逐行独立的匹配规则。
你直接传入df['Letter']这个Series对象时,方法会尝试把整个Series当做全局匹配的正则模式解析,而Series是可变类型、不可哈希,不符合正则模式的参数要求,因此抛出TypeError: 'Series' objects are mutable, thus they cannot be hashed错误。
如果硬要逐行调用str.count()实现需求,本质还是要写循环逐行传参,会失去向量化接口的性能优势,没有必要。

正确实现方案

方法1:列表推导式(推荐,性能最优)

直接用Python原生字符串的count()方法,逐行配对密码和对应要统计的字符即可,大数据量下速度比apply写法快3~5倍:

df['Count'] = [pwd.count(letter) for pwd, letter in zip(df['Password'], df['Letter'])]

方法2:逐行apply写法

如果偏好pandas的行处理逻辑,可以用apply指定按行轴计算,每行单独取对应字符传入count方法:

df['Count'] = df.apply(lambda row: row['Password'].count(row['Letter']), axis=1)
结果验证

针对你给出的样例DataFrame,运行上述任意一段代码,得到的统计结果完全符合预期:

indexCount
04
18
220
36
45

补充说明:如果后续需要统计的字符是正则特殊字符(比如.、*、+这类),记得先用re.escape()对字符做转义处理,避免被解析为正则语法导致统计错误,你当前场景下统计的都是普通字母,不需要额外处理。

内容的提问来源于stack exchange,提问作者MarkS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:06:25