如何基于另一列是否包含列表值创建新的DataFrame列?
解决方案
方法1:利用pandas字符串方法(高效推荐)
通过str.contains结合正则表达式批量匹配列表中的元素,是处理这类问题的高效方式:
import pandas as pd # 初始化原始数据 df = pd.DataFrame({ 'a': ['apple2876', '3pear6', '12banana28', '1ab33pie2', '2rbbwater'], 'b': ['red'] * 5 }) # 定义需要匹配的元素列表 target_elements = ['apple', 'banana', 'water'] # 将列表转为正则匹配模式,匹配任意一个元素 match_pattern = '|'.join(target_elements) # 创建新列c:匹配到元素则为1,否则为0 df['c'] = df['a'].str.contains(match_pattern).astype(int)
方法2:自定义函数遍历(逻辑直观)
如果需要更直观的逻辑控制,可以用apply结合自定义函数实现:
import pandas as pd df = pd.DataFrame({ 'a': ['apple2876', '3pear6', '12banana28', '1ab33pie2', '2rbbwater'], 'b': ['red'] * 5 }) target_elements = ['apple', 'banana', 'water'] def check_match(text): for elem in target_elements: if elem in text: return 1 return 0 df['c'] = df['a'].apply(check_match)
执行上述任意一种方法后,即可得到目标DataFrame,新列c会根据列a是否包含列表中的元素标记1或0。
内容的提问来源于stack exchange,提问作者leilei
相关产品推荐
相关产品推荐

