如何在Pandas DataFrame中基于两列元素交集生成新列?
解决方法
步骤说明
要生成Col3列获取每行Col1和Col2的元素交集,核心是先将逗号分隔的字符串转为集合,利用集合的交集操作快速匹配,再将结果转回指定格式。
完整代码
import pandas as pd # 初始化原始DataFrame data = {'Col1': ["apple, banana, orange", "dog, cat", "python, java, c++"], 'Col2': ["banana, lemon, blueberry", "bird, cat", "R, fortran"] } df = pd.DataFrame(data) # 定义处理每行交集的函数 def get_row_intersection(row): # 分割字符串并去除元素前后空格,转为集合 col1_items = set(item.strip() for item in row['Col1'].split(',')) col2_items = set(item.strip() for item in row['Col2'].split(',')) # 计算交集 intersection = col1_items & col2_items # 返回结果:交集非空则拼接为字符串,否则返回pd.NA return ', '.join(intersection) if intersection else pd.NA # 应用函数生成Col3列 df['Col3'] = df.apply(get_row_intersection, axis=1) print(df)
代码解释
- 字符串转集合:使用
split(',')拆分逗号分隔的字符串,再通过strip()去除每个元素的前后空格,避免因空格导致匹配失败(比如" banana"和"banana"会被识别为不同元素),最后转为集合方便做交集运算。 - 交集计算:利用集合的
&运算符直接获取两个集合的交集。 - 结果格式化:如果交集不为空,用
', '.join()将元素拼接为字符串;如果交集为空,返回pd.NA符合预期输出。
运行后得到的DataFrame与预期一致:
Col1 Col2 Col3 0 apple, banana, orange banana, lemon, blueberry banana 1 dog, cat bird, cat cat 2 python, java, c++ R, fortran <NA>
内容的提问来源于stack exchange,提问作者Caterina
相关产品推荐
相关产品推荐

