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

使用Pandas依据两列值统计符合条件的行数问题

解决你的DataFrame筛选统计问题

看起来你遇到了字符串匹配和数据筛选的典型坑,我来帮你一步步排查解决:

1. 先修正筛选逻辑的核心问题

首先,你需要明确是包含匹配而非精确匹配,同时要忽略大小写。如果之前用了精确相等(==)来匹配CBO列的"motorista",那肯定会出错——因为你要的是包含这个词的行,而不是完全等于它的行。

正确的写法应该用str.contains,并设置case=False忽略大小写,同时用na=False排除空值行避免干扰:

# 正确的筛选统计代码
filtered_rows = dem[
    dem['CBO'].str.contains('motorista', case=False, na=False) & 
    (dem['ESCOLARIDADE'] == 'Fundamental completo')
]
count = filtered_rows.shape[0]
print(count)

2. 排查数据里的隐藏异常

如果上面的代码还是返回0,大概率是数据里有隐藏的空格、特殊字符或者拼写差异:

  • 先清理ESCOLARIDADE列的前后空格,很多时候数据会带多余空格导致匹配失败:
    filtered_rows = dem[
        dem['CBO'].str.contains('motorista', case=False, na=False) & 
        (dem['ESCOLARIDADE'].str.strip() == 'Fundamental completo')
    ]
    
  • 手动核对所有CBO含"motorista"的行,看看ESCOLARIDADE的实际值:
    # 先导出所有CBO匹配的行,直观检查
    motorista_records = dem[dem['CBO'].str.contains('motorista', case=False, na=False)]
    print(motorista_records[['CBO', 'ESCOLARIDADE']])
    
    这样你就能直接看到哪一行的ESCOLARIDADE符合条件,也能快速发现比如拼写错误、全角字符这类隐藏问题。

3. 解决另一个DataFrame的反向问题

对于那个本该返回0却得到1的DataFrame,用同样的思路排查:

  • 打印出筛选出来的那一行,仔细检查CBO是否真的包含"motorista",ESCOLARIDADE是否真的符合条件
  • 检查是否有空值被误判,或者字符串匹配时的大小写、空格问题

4. 快速验证数据的小技巧

可以用value_counts()查看列的唯一值,确认你的目标值确实存在于数据中:

# 查看ESCOLARIDADE的所有唯一值,确认目标值存在
print(dem['ESCOLARIDADE'].value_counts())
# 查看CBO列中包含motorista的所有唯一值
print(dem[dem['CBO'].str.contains('motorista', case=False, na=False)]['CBO'].value_counts())

按照这些步骤一步步来,应该就能找到问题所在并解决啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:36