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

如何判断Pandas DataFrame中choice列字符串是否包含于fruit列并生成匹配列?

解决Pandas中判断某列字符串是否存在于相邻列的问题

刚好遇到过类似的需求,这就给你一步步讲怎么实现~

首先先明确我们的输入和期望输出:

示例输入DataFrame

import pandas as pd

df = pd.DataFrame({
    'fruit': ['apple banana', 'orange grape', 'pear', 'mango pineapple'],
    'choice': ['banana', 'orange', 'apple', 'mango']
})

期望输出

我们需要新增一列choice_match,当choice列的字符串包含在对应行的fruit列中时返回1,否则返回0,最终结果如下:

fruit  choice  choice_match
0      apple banana  banana             1
1     orange grape  orange             1
2              pear   apple             0
3  mango pineapple   mango             1

方法1:使用apply逐行判断

这是最直观的方法,通过apply按行遍历,检查每行的choice是否在fruit中:

df['choice_match'] = df.apply(lambda row: 1 if row['choice'] in row['fruit'] else 0, axis=1)
  • axis=1表示按行处理数据
  • lambda函数会对每一行执行判断逻辑,返回1或0

方法2:列表推导式(大数据量更高效)

如果你的DataFrame行数很多,列表推导式的执行效率会比apply更高,因为它避免了apply的额外开销:

df['choice_match'] = [1 if choice in fruit else 0 for fruit, choice in zip(df['fruit'], df['choice'])]
  • 通过zip把fruit和choice列的元素一一配对,然后逐个判断

方法3:结合numpy.where实现

如果你习惯用numpy的风格,也可以用numpy.where来生成结果:

import numpy as np

df['choice_match'] = np.where(df.apply(lambda row: row['choice'] in row['fruit'], axis=1), 1, 0)
  • numpy.where会根据第一个参数的布尔值,返回第二个或第三个参数的值

执行完上面任意一种方法后,打印df就能看到符合预期的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:34:34