如何基于指定列表筛选Pandas DataFrame中符合条件的行?
解决方案
可以通过构建阈值映射字典结合Pandas的矢量化操作实现,完全避免迭代,效率最优:
步骤1:将规则列表转换为阈值字典
把列表l中的每个字符串拆分为a的取值和对应的b阈值,转成字典方便快速映射:
threshold_dict = {int(s[0]): int(s[1]) for s in l} # 生成的字典:{1:5, 2:4, 3:6, 4:5}
步骤2:生成筛选掩码
利用map方法为每行的a值匹配对应的阈值,再通过矢量化比较得到布尔掩码:
mask = df['b'] >= df['a'].map(threshold_dict)
步骤3:筛选DataFrame
用掩码过滤出符合条件的行:
filtered_df = df[mask]
完整代码
import pandas as pd df = pd.DataFrame({"a": [1,1,1,2,2,2,3,3,3,4,4,4], "b": [4,5,6,4,5,6,4,5,6,4,5,6]}) l = ["15", "24", "36", "45"] # 构建阈值字典 threshold_dict = {int(s[0]): int(s[1]) for s in l} # 生成掩码并筛选数据 filtered_df = df[df['b'] >= df['a'].map(threshold_dict)] print(filtered_df)
输出结果
a b 1 1 5 2 1 6 3 2 4 4 2 5 5 2 6 8 3 6 10 4 5 11 4 6
这种方案全程采用Pandas矢量化操作,比循环迭代效率高得多,尤其适合处理大规模数据集。
内容的提问来源于stack exchange,提问作者kanhaai
相关产品推荐
相关产品推荐

