如何优雅筛选DataFrame中B列以对应A列值开头的行,替代apply方法
Pandas筛选B列以对应A列值开头的行的实现方案
你之前使用的apply方案本质是pandas层的逐行迭代,额外开销很高,下面两种方案性能更优、写法更简洁:
方案1:列表推导式(绝大多数场景首选)
列表推导是纯Python层的轻量循环,开销远低于apply,写法也最简洁:
# 生成筛选掩码 mask = [b.startswith(a) for a, b in zip(df['A'], df['B'])] # 筛选符合条件的行 filtered_df = df[mask]
方案2:numpy向量化(适合百万行以上超大数据集)
数据量极大的场景下可以用numpy向量化操作进一步提升效率:
import numpy as np # 封装字符串匹配逻辑为向量化函数 vec_match = np.vectorize(lambda prefix, full_str: full_str.startswith(prefix)) mask = vec_match(df['A'], df['B']) filtered_df = df[mask]
用你提供的示例数据运行上述代码,最终得到的结果就是序号为0、3的两行,完全符合需求。
内容的提问来源于stack exchange,提问作者bulklodd
相关产品推荐
相关产品推荐

