You need to enable JavaScript to run this app. Pandas DataFrame字符串列分类计数 排除相似子串误匹配实现精准统计
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame字符串列分类计数 排除相似子串误匹配实现精准统计

调整方案

原有逻辑的计数偏差根源是str.contains采用子串匹配规则:只要字段值中包含目标字符串片段就会被判定为命中,因此带更长类名前缀的行都会被误统计。要实现精准分类计数,只需把匹配规则从“包含子串”改为值完全相等即可。

兼容原有代码结构的循环实现

把原代码里的过滤条件从df.tag.str.contains(data_type,na=False)替换为相等判断,同时修正原代码中的变量名笔误(原代码存在循环变量命名不一致、dtype类名误引用的问题,会导致运行时报错),完整可运行代码如下:

import pandas as pd

d = {'tag': ['DATA', 'DATAKIND','DATA','DATA','DATAKINDSIM','DATAKIND']}
df = pd.DataFrame(data=d)
data_types=['DATA','DATAKIND','DATAKINDSIM']

for data_type in data_types:
    print(data_type)
    counting = df[df['tag'] == data_type].count()
    print(counting)

运行后输出即为预期效果:

DATA
tag    3
dtype: int64
DATAKIND
tag    2
dtype: int64
DATAKINDSIM
tag    1
dtype: int64

更高效的无循环实现

不需要手动写循环遍历类别,直接使用Pandas内置的分类计数能力即可,数据量大时性能远高于循环判断:

# 对tag列的所有值直接计数,再按照指定的类别顺序对齐结果
count_result = df['tag'].value_counts().reindex(data_types)
print(count_result)

输出结果:

DATA           3
DATAKIND       2
DATAKINDSIM    1
Name: tag, dtype: int64

这种方法还能自动处理不存在的类别值,避免手动写循环可能遗漏的边界问题。

注意:如果后续tag列存在大小写不一致、前后带空格的脏数据,可以在计数前先做标准化处理,比如df['tag'] = df['tag'].str.strip().str.upper(),避免因为格式问题导致的匹配失效。

内容的提问来源于stack exchange,提问作者Carlos P.Dengra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 01:27:02