如何在Polars中实现Pandas isin函数的等效功能?
在Polars中实现等效Pandas的isin逻辑(无join、无标记列)
Pandas实现示例
先明确我们要复刻的逻辑,假设数据集如下:
import pandas as pd DF = pd.DataFrame({'id': [1,2,3,4,5]}) DF2 = pd.DataFrame({'id': [2,4,6], 'flag': [1,0,1]}) # 核心逻辑:给DF新增列,标记id是否存在于DF2中flag=1的id集合 DF['is_flagged'] = DF['id'].isin(DF2[DF2['flag']==1]['id'])
最终DF输出:
| id | is_flagged |
|---|---|
| 1 | False |
| 2 | True |
| 3 | False |
| 4 | False |
| 5 | False |
Polars等效实现
你之前用is_in()失败,大概率是参数格式不对。Polars的is_in()支持直接传入Polars Series或表达式,完全不需要join或额外标记列,两种写法都能实现需求:
写法1:先提取符合条件的id列表
import polars as pl pl_DF = pl.DataFrame({'id': [1,2,3,4,5]}) pl_DF2 = pl.DataFrame({'id': [2,4,6], 'flag': [1,0,1]}) # 从DF2筛选flag=1的id并转成列表 flagged_ids = pl_DF2.filter(pl.col('flag') == 1)['id'].to_list() # 新增is_flagged列 pl_DF = pl_DF.with_columns( is_flagged=pl.col('id').is_in(flagged_ids) )
写法2:表达式嵌套(更简洁)
无需提前转列表,直接在is_in()中嵌套筛选逻辑:
pl_DF = pl_DF.with_columns( is_flagged=pl.col('id').is_in(pl_DF2.filter(pl.col('flag') == 1).select('id')) )
两种写法的输出结果和Pandas完全一致,且满足你要求的无join、无标记列的条件。
内容的提问来源于stack exchange,提问作者Alk90
相关产品推荐
相关产品推荐

