如何在Pandas DataFrame中找出两列单词列表的非共同元素
解决Pandas两列列表找非共同单词的问题
没问题,我来帮你搞定这个需求!根据你的例子,你需要找出column2中存在但column1里没有的单词,而且要保留这些单词在column2里的原有顺序,对吧?下面是具体的实现步骤:
步骤1:准备示例数据
首先我们先创建你给出的测试DataFrame:
import pandas as pd # 构造示例数据 data = { 'column1': [['a','b'], ['c','a']], 'column2': [['c','a','b'], ['a','b','d','c']] } df = pd.DataFrame(data)
步骤2:定义提取独有的单词的函数
我们需要一个函数,接收两个列表,返回第二个列表中不在第一个列表里的元素,同时保持原有顺序。这里用集合来优化查找效率(集合的成员检测比列表快很多):
def get_unique_from_col2(col1_list, col2_list): # 把column1的列表转成集合,方便快速查找 col1_words = set(col1_list) # 遍历column2的每个单词,只保留不在column1里的 return [word for word in col2_list if word not in col1_words]
步骤3:应用函数生成新列
用Pandas的apply方法,把函数应用到每一行的column1和column2上,生成column3:
df['column3'] = df.apply(lambda row: get_unique_from_col2(row['column1'], row['column2']), axis=1)
最终结果
运行完上面的代码后,你的DataFrame会变成这样:
column1 column2 column3 0 [a, b] [c, a, b] [c] 1 [c, a] [a, b, d, c] [b, d]
正好符合你期望的结果!如果之后你需要的是两列各自独有的单词的合集(比如假设column1有column2没有的元素也要包含),只需要稍微修改函数就行,比如:
def get_symmetric_unique(col1_list, col2_list): col1_set = set(col1_list) col2_set = set(col2_list) # 找出两边独有的元素,再按原列表的顺序整理 unique_col1 = [word for word in col1_list if word not in col2_set] unique_col2 = [word for word in col2_list if word not in col1_set] return unique_col1 + unique_col2
内容的提问来源于stack exchange,提问作者Karim
相关产品推荐
相关产品推荐

