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

基于多列名称统计文本列中名称出现次数的Python问题

解决方法

核心思路

对每行数据,提取name1、name2、name3中的非空名称,逐个统计每个名称在对应text里的精确单词出现次数(避免子串误统计,比如barbieken不会被算作barbie),最后求和得到目标列count_name。

代码实现

import pandas as pd
import re

# 还原你的示例DataFrame
data = {
    'text': [
        'barbie and ken live in a house',
        'bond is preparing a bond movie',
        'homer likes donuts',
        'where does mary live',
        'i am travelling with john',
        'barbie ken barbieken'
    ],
    'name1': ['barbie', 'bond', 'homer', 'peter', 'john', 'barbie'],
    'name2': ['ken', 'james', 'bart', pd.NA, pd.NA, 'ken'],
    'name3': ['sophie', pd.NA, pd.NA, pd.NA, pd.NA, pd.NA]
}
df = pd.DataFrame(data)

# 定义每行的统计逻辑
def count_matching_names(row):
    # 过滤出当前行的非空名称
    valid_names = [name for name in [row['name1'], row['name2'], row['name3']] if pd.notna(name)]
    total_count = 0
    current_text = row['text']
    
    for name in valid_names:
        # 用正则匹配完整单词,避免子串干扰
        # re.escape处理名称中的特殊字符,防止正则语法错误
        matches = re.findall(r'\b' + re.escape(name) + r'\b', current_text)
        total_count += len(matches)
    
    return total_count

# 按行应用函数生成结果列
df['count_name'] = df.apply(count_matching_names, axis=1)

print(df)

代码说明

  1. 正则匹配逻辑:用\b标记单词边界,确保只有完整的目标名称会被统计,比如barbieken里的barbie不会被误算。
  2. 缺失值处理:通过pd.notna过滤掉name列中的空值,避免无效统计。
  3. 按行处理:df.apply(..., axis=1)实现逐行计算,保证每行的统计结果对应自身的text和name数据。

运行结果

输出的DataFrame与你期望的count_name完全一致:

text    name1   name2   name3  count_name
0  barbie and ken live in a house   barbie     ken  sophie           2
1    bond is preparing a bond movie     bond   james    <NA>           2
2              homer likes donuts    homer    bart    <NA>           1
3            where does mary live    peter    <NA>    <NA>           0
4       i am travelling with john     john    <NA>    <NA>           1
5               barbie ken barbieken   barbie     ken    <NA>           2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:22