You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件比较两个DataFrame并剔除不符合要求的数据

高效实现DataFrame按指定条件筛选的方案

针对你提出的需求——从df中仅保留在df_2里policy number匹配且policy status为good的记录,以下是两种远快于逐行遍历的高效实现方法:

方法一:筛选+isin(简洁优先)

利用pandas的向量化筛选和isin()方法,直接定位符合条件的记录:

import pandas as pd

# 示例数据
df = pd.DataFrame({'policy number':[11,22,33,44,55,66,77,88,99], 'policy status':['good', 'good', 'good', 'good', 'good','good', 'good', 'good', 'good']})
df_2 = pd.DataFrame({'policy number':[11,83,63,44,55,66,67,88,99,100], 'policy status':['bad','bad', 'good', 'good', 'bad', 'good','bad', 'good', 'average', 'good']})

# 第一步:提取df_2中status为good的保单编号
valid_policies = df_2[df_2['policy status'] == 'good']['policy number']

# 第二步:过滤df,只保留符合条件的行
filtered_df = df[df['policy number'].isin(valid_policies)]

print(filtered_df)

执行后输出:

policy number policy status
3             44           good
5             66           good
7             88           good

方法二:Merge合并筛选(需保留额外字段时适用)

如果后续需要用到df_2中的其他字段,用merge操作可以同时完成匹配和筛选:

# 先筛选df_2的有效记录,再与df做内连接
merged_result = df.merge(
    df_2[df_2['policy status'] == 'good'],
    on='policy number',
    how='inner'
)

# 保留原df的status字段(按需调整列名)
final_df = merged_result[['policy number', 'policy status_x']].rename(
    columns={'policy status_x': 'policy status'}
)

print(final_df)

输出结果与方法一完全一致。

为什么这两种方法更高效?

这两种方案都是基于pandas的向量化操作,底层由C语言实现,避免了Python层面的逐行循环,处理大规模数据集时,速度和内存占用会比逐行遍历优化几个数量级,完全适配你的大数据场景。

内容的提问来源于stack exchange,提问作者Ranger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:42:17