如何在Pandas中查找两列列表的首个公共元素
问题:找出每行两列列表的首个公共元素
我有一个包含两列的数据集,每列均由整数列表组成,需要找出每行中两列列表的首个公共元素。
示例输入数据:
import pandas as pd d = {'col1': [[1,2,3,5], [3,4,5]], 'col2': [[2,3,4], [3,5]]} df = pd.DataFrame(data=d)
对应的DataFrame:
col1 col2 0 [1, 2, 3, 5] [2, 3, 4] 1 [3, 4, 5] [3, 5]
期望得到的结果DataFrame:
d = {'result': [2,3]} expect_df = pd.DataFrame(data=d)
对应的结果:
result 0 2 1 3
解决方案
方法1:使用apply遍历行
定义函数逐个检查col1中的元素是否存在于col2中,返回第一个匹配项。为提升查找效率,先将col2转为集合:
def find_first_common(row): col2_set = set(row['col2']) for num in row['col1']: if num in col2_set: return num return None # 无公共元素时返回None df['result'] = df.apply(find_first_common, axis=1) # 提取结果列 result_df = df[['result']] print(result_df)
方法2:列表推导式(更简洁)
用生成器表达式配合next函数,直接遍历每行的两个列表,快速定位首个公共元素:
df['result'] = [next((x for x in col1 if x in set(col2)), None) for col1, col2 in zip(df['col1'], df['col2'])] result_df = df[['result']] print(result_df)
两种方法都能得到期望结果,将col2转为集合的操作可大幅降低查找时间复杂度,适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者mickael estephe
相关产品推荐
相关产品推荐

