如何在Pandas DataFrame的lambda函数中实现多条件自定义函数应用?
解决方案
1. 定义颜色对应关键词列表
先明确各性格分类对应的关键词集合:
list_orange = ["proactive", "creative", "dynamic"] # orange性格关键词 list_red = ["ambitious", "competitive", "determined"] # red性格关键词 list_green = ["collaborative", "patient", "supportive"] # green性格关键词
2. 编写行处理函数
用独立函数替代lambda,实现多条件判断逻辑,可读性和扩展性更强:
def process_resume(row): # 建立颜色到关键词列表的映射关系 color_map = { "orange": list_orange, "red": list_red, "green": list_green } # 优先匹配color_1,无匹配则匹配color_2 if row["color_1"] in color_map: target_words = color_map[row["color_1"]] elif row["color_2"] in color_map: target_words = color_map[row["color_2"]] else: # 两个颜色都无匹配时返回原文本 return row["resume_text"] # 调用addKeyWords添加关键词 return addKeyWords(row["resume_text"], target_words)
如果需要同时应用两个性格分类的关键词(比如一行同时有orange和red,合并两类关键词),可以调整逻辑:
def process_resume(row): color_map = { "orange": list_orange, "red": list_red, "green": list_green } # 收集所有匹配的关键词列表 target_words = [] if row["color_1"] in color_map: target_words.extend(color_map[row["color_1"]]) if row["color_2"] in color_map: target_words.extend(color_map[row["color_2"]]) if not target_words: return row["resume_text"] return addKeyWords(row["resume_text"], target_words)
3. 应用函数到DataFrame
通过apply按行处理整个数据集:
df["resume_text_extra"] = df.apply(process_resume, axis=1)
4. 优化addKeyWords函数(可选)
原函数的词数计算逻辑可以简化,同时避免短文本导致添加词数为0的情况:
import random def addKeyWords(string, color_list): resume_word_count = len(string.split()) percentage = 0.05 number_of_words_to_be_added = round(resume_word_count * percentage) # 词数为0时直接返回原文本,避免空列表报错 if number_of_words_to_be_added == 0: return string list_of_words = random.choices(color_list, k=number_of_words_to_be_added) return string + " " + " ".join(list_of_words)
内容的提问来源于stack exchange,提问作者Viol1997
相关产品推荐
相关产品推荐

