如何判断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
相关产品推荐
相关产品推荐

