pandas如何筛选ID后缀不存在于另一DataFrame的指定行
实现方法
核心思路
先提取DF1中每个ID的x字符后段的后缀,再匹配DF2的ID字段,过滤出后缀不在DF2 ID中的行即可。
分步实现
- 提取DF1 ID字段的后缀:用
str.split('x', n=1).str[-1]按第一个x分割ID,取后半段作为后缀,避免ID含多个x时分割出错 - 将DF2的ID字段转为集合,大幅提升后续匹配效率
- 用反向
isin判断过滤出符合要求的DF1行
代码示例
写法1(不修改原DF1,无临时列)
df2_ids = set(df2["ID"]) result = df1[~df1["ID"].str.split("x", n=1).str[-1].isin(df2_ids)]
写法2(显式生成临时后缀列,方便调试)
# 生成临时后缀列 df1["id_suffix"] = df1["ID"].str.split("x", n=1).str[-1] df2_ids = set(df2["ID"]) # 过滤后删除临时列 result = df1[~df1["id_suffix"].isin(df2_ids)].drop(columns=["id_suffix"])
注意:如果你的DF2数据量很小,也可以直接用
df2["ID"]代替上面的集合,但数据量超过1万条时用集合性能优势会非常明显。
内容的提问来源于stack exchange,提问作者paidsponsor
相关产品推荐
相关产品推荐

