Python中能否通过比对Pandas DataFrame列生成目标单词列表?
当然可以实现这个需求!我来给你一步步拆解怎么做,还会附上可直接运行的代码示例:
实现步骤与代码示例
1. 先构造示例数据
先创建一个符合你描述的DataFrame,方便快速测试效果:
import pandas as pd # 构造示例DataFrame:第一列是root_word,最后两列是待比对的单词列 data = { 'root_word': ['apple', 'banana', 'cherry', 'date'], 'word_col1': ['apple', 'orange', 'cherry', 'elderberry'], 'word_col2': ['grape', 'banana', 'fig', 'date'] } df = pd.DataFrame(data)
2. 方法一:逐行遍历检查(直观易懂)
这种方式逻辑清晰,适合刚接触Pandas的朋友,容易理解每一步的操作:
new_word = [] def check_matching_words(row): current_root = row['root_word'] # 获取当前行的最后两列单词 words_to_check = row[-2:] for word in words_to_check: # 这里判断单词是否等于对应行的root_word,若需要"包含"关系可改成 `word in current_root` if word == current_root: new_word.append(word) # 把检查函数应用到DataFrame的每一行 df.apply(check_matching_words, axis=1) print(new_word) # 输出结果: ['apple', 'banana', 'cherry', 'date']
3. 方法二:矢量化操作(高效适合大数据)
如果你的DataFrame数据量很大,推荐用Pandas的矢量化操作——它比逐行循环快得多,性能优势会非常明显:
# 提取DataFrame的最后两列 last_two_columns = df.iloc[:, -2:] # 逐元素比较最后两列的单词是否等于对应行的root_word match_mask = last_two_columns.eq(df['root_word'], axis=0) # 提取所有匹配的单词并转成列表 new_word = last_two_columns[match_mask].stack().tolist() print(new_word) # 输出结果和上面一致: ['apple', 'banana', 'cherry', 'date']
灵活调整判断逻辑
如果你的root_word列不是单个单词,而是包含多个单词的列表(比如root_word: [['apple', 'fruit'], ['banana']]),只需要把判断条件改成:
# 针对root_word是列表的情况 if word in current_root: new_word.append(word)
内容的提问来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

