Python中判断DataFrame两列字符串列表是否相交并生成标记列
问题解决:判断列表列间是否存在元素匹配并生成标记列
问题分析
你的代码逻辑有误:[x in y for x,y in zip(df['CAR1'], df['CAR2'])] 是检查整个CAR1列表是否是CAR2列表的一个元素,而非两个列表是否存在共同元素,这导致无法得到预期结果。
正确实现方法
方法1:使用any()逐个检查元素
通过apply遍历每行,用any()判断CAR1中是否有元素存在于CAR2中:
import pandas as pd # 构造示例DataFrame data = { 'CAR1': [['ford','hyundai'], ['ford','hyundai'], ['ford','hyundai']], 'CAR2': [['ford','hyundai'], ['hyundai','nissan'], ['bmw', 'audi']] } df = pd.DataFrame(data) # 生成Flag列 df['Flag'] = df.apply(lambda row: 1 if any(car in row['CAR2'] for car in row['CAR1']) else 0, axis=1)
方法2:使用集合交集(更高效)
将列表转为集合,利用集合交集快速判断是否存在共同元素:
df['Flag'] = df.apply(lambda row: 1 if set(row['CAR1']) & set(row['CAR2']) else 0, axis=1)
预期输出
执行上述代码后,DataFrame将变为:
CAR1 CAR2 Flag 0 [ford, hyundai] [ford, hyundai] 1 1 [ford, hyundai] [hyundai, nissan] 1 2 [ford, hyundai] [bmw, audi] 0
内容的提问来源于stack exchange,提问作者AB14
相关产品推荐
相关产品推荐

