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

Pandas匹配DataFrame字符串列与列表标记获奖演员的逻辑问题

问题根源

你的代码存在两个直接导致结果错误的核心问题:

  • 字符串拆分未处理多余空格:直接用split(',')拆分演员字符串时,逗号后的演员名会携带前置空格,比如'Alexander, Ann'拆分后得到['Alexander', ' Ann'],带空格的' Ann'和获奖名单里的'Ann'无法匹配。
  • 循环判断逻辑失效:最后一层遍历演员列表的循环里,判断条件x in item not in award中的x是上一段循环结束后残留的变量值(即获奖名单里的'Betty'),并非当前行拆分出的单个演员名,链式判断的逻辑也完全不符合“当前行存在任意一名获奖演员即标记1”的需求。
修复方案

方案1:修正原有循环逻辑

先把获奖名单转为集合(查询效率更高),拆分演员名时同步去除每个名字的前后空格,逐行判断两个集合是否存在交集即可:

import pandas as pd

# 构造样例数据
df1 = pd.DataFrame()
df1['cast'] = ['Alexander, Ann', 'Bob, Bill, Benedict, Betty']

df2 = pd.DataFrame()
df2['awards'] = ['Betty']

# 获奖名单转集合,加速匹配
award_set = set(df2['awards'].tolist())

actors_with_awards = []
for cast_str in df1['cast']:
    # 拆分字符串后逐个去除演员名前后空格
    cast_list = [name.strip() for name in cast_str.split(',')]
    # 存在交集则标记1,否则标记0
    has_award = 1 if set(cast_list) & award_set else 0
    actors_with_awards.append(has_award)

df1['actors_with_awards'] = actors_with_awards

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

castactors_with_awards
Alexander, Ann0
Bob, Bill, Benedict, Betty1

方案2:pandas向量化写法(无显式循环,数据量更大时运行速度更快)

不需要手写for循环,直接用pandas内置的apply方法处理即可,代码更简洁:

award_set = set(df2['awards'])
df1['actors_with_awards'] = df1['cast'].apply(
    lambda x: 1 if set(i.strip() for i in x.split(',')) & award_set else 0
)

提示:如果原始数据里演员名存在更多格式问题(比如首尾多余空格、特殊符号),可以在匹配前先做统一的字符串清洗,避免匹配失败。

内容的提问来源于stack exchange,提问作者Rbc.F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:45:32