如何在pandas dataframe中基于A列包含B列的条件创建新列C
错误原因
你之前使用的isin()方法的作用是判断A列的每个完整值是否存在于B列的所有值组成的集合中,并不是逐行判断当前行的A列字符串是否包含当前行的B列内容,因此无法得到预期结果。
正确实现方法
方法1:列表推导式(效率更高,推荐大多数场景使用)
import pandas as pd import numpy as np df=pd.DataFrame({'A':['Mary, Tom, Steve','Mary, Kim','Petr, Steve','Petr, Mary'], 'B':['Kim','Kim','Kim','Mary']}) # 逐行判断B列内容是否在A列字符串中 df['C'] = np.where([b in a for a, b in zip(df['A'], df['B'])], 'OK', 'Not OK')
最终输出结果:
| A | B | C |
|---|---|---|
| Mary, Tom, Steve | Kim | Not OK |
| Mary, Kim | Kim | OK |
| Petr, Steve | Kim | Not OK |
| Petr, Mary | Mary | OK |
方法2:apply逐行判断(写法更直观,适合小数据量场景)
df['C'] = np.where(df.apply(lambda x: x['B'] in x['A'], axis=1), 'OK', 'Not OK')
两种方法得到的结果完全一致,你可以根据实际数据量选择合适的写法。
内容的提问来源于stack exchange,提问作者Anastasios V
相关产品推荐
相关产品推荐

