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

pandas如何统计含多个值的单元格内各值出现次数?

多值单元格姓名计数方案解答
  • 你不需要必须拆分多值单元格才能完成统计,拆分单元格和不拆分单元格两种路径都可以实现需求。
  • 完全可以结合str.split与value_counts方法实现统计,这也是这类场景下可读性、可维护性最高的常规实现方案。

方案1:str.split+value_counts(拆分单元格实现)

核心逻辑是先按分隔符拆分字符串为列表,展开列表为独立行后清洗脏数据,最后直接计数即可,注意要处理原始数据里末尾多余逗号、前后空格的问题。

import pandas as pd

# 构造与描述一致的测试DataFrame
df = pd.DataFrame({
    "employees on trip": [
        "jeff, jerome, betsy,",
        "jerome,",
        "betsy, jerome",
        "jeff,"
    ]
})

# 计数逻辑
count_result = (
    df["employees on trip"]
    .str.split(",") # 按逗号分隔拆分字符串为姓名列表
    .explode() # 将每个列表里的姓名展开为单独的行
    .str.strip() # 去除姓名前后残留的空格
    .loc[lambda x: x != ""] # 过滤末尾逗号拆分出的空字符串
    .value_counts() # 直接按值计数
)

运行后输出结果完全符合预期:

jerome    3
jeff      2
betsy     2
Name: employees on trip, dtype: int64

方案2:无需拆分单元格的实现方案

如果不想做拆分、展开操作,可以直接用字符串正则匹配的方式逐姓名统计总出现次数,建议加上单词边界匹配规则,避免把包含目标姓名的长名字(比如jeffrey)误统计为jeff。

# 待统计的姓名清单,也可以提前通过正则从列中自动提取
target_names = ["jeff", "jerome", "betsy"]

count_result = pd.Series({
    name: df["employees on trip"].str.count(fr"\b{name}\b").sum()
    for name in target_names
})

运行后输出结果和方案1完全一致:

jeff      2
jerome    3
betsy     2
dtype: int64

如果你的数据里不存在姓名子串冲突的情况,也可以去掉正则里的\b边界符,直接匹配姓名字符串即可。


内容的提问来源于stack exchange,提问作者Zachary A. Wickard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:15:51