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

如何在Pandas DataFrame中统计每行指定值的出现次数?

需求与问题

我希望编写一个函数,在Pandas DataFrame的每行中搜索'cam1'或'cam2',并将匹配次数作为新列输出。

现有DataFrame定义如下:

import pandas as pd
df = pd.DataFrame({'A':['cam1','cam2','cam1','cam4'],'B':['cam2', 'cam1', 'cam4', 'cam3'],'C':['cam3','cam4', 'cam5','cam2']})

对应的表格:

ABC
0cam1cam2cam3
1cam2cam1cam4
2cam1cam4cam5
3cam4cam3cam2

期望输出为添加Count列的DataFrame:

ABCCount
0cam1cam2cam32
1cam2cam1cam42
2cam1cam4cam51
3cam4cam3cam21

请问是否可以不使用大量if-else语句实现该需求?


实现方案

完全可以不用大量if-else语句,Pandas提供了多种简洁的向量化操作来高效实现这个需求,以下是几种实用方法:

方法一:isin() + sum()(推荐)

利用isin()判断每个元素是否属于目标列表,再按行求和,这是最简洁高效的向量化实现:

targets = ['cam1', 'cam2']
df['Count'] = df.isin(targets).sum(axis=1)

方法二:多条件eq() + sum()

如果需要单独指定匹配值,可通过等于判断后累加次数:

df['Count'] = (df == 'cam1').sum(axis=1) + (df == 'cam2').sum(axis=1)

方法三:apply()配合简单判断(灵活但效率稍低)

如果需要自定义更复杂的匹配逻辑,可使用apply,但此方法适合小数据集,大数据集优先选用前两种向量化方法:

def count_matches(row):
    count = 0
    for val in row:
        if val in ['cam1', 'cam2']:
            count += 1
    return count

df['Count'] = df.apply(count_matches, axis=1)

以上方法均无需堆砌if-else语句,前两种向量化操作的执行效率远高于循环判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:10:39