比较两个数据框并移除不合格项

1 投票
2 回答
29 浏览
提问于 2025-04-14 16:14

我有两个数据框(数据表)。我试着生成了一些简单的数据来说明我想要的结果,任何建议或帮助都非常感谢。

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']})

我想通过保单号码来比较这两个数据框,如果[policy status]这一列的状态还是“好”,我想保留这些保单。否则,我想把它们从第一个数据框中删除。

有没有更简单的方法来做到这一点?我试过逐行比较这两个数据框,但这样做耗时太长,因为我的数据集比较大。

提前谢谢大家!

2 个回答

1

使用pandas的合并操作,选择'inner'连接类型。

import pandas as pd

# Sample data
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']})

# Merge dataframes based on policy number
merged_df = pd.merge(df, df_2, on='policy number', suffixes=('_original', '_updated'), how='inner')

# Filter rows where policy status is still good
filtered_df = merged_df[merged_df['policy status_original'] == 'good']

# Keep only the relevant columns
filtered_df = filtered_df[['policy number', 'policy status_original']]

print(filtered_df)
1

如果我理解得没错,你可以使用 pd.Series.isin 来完成这个任务(也就是创建一个布尔掩码):

print(
    df[
        df["policy number"].isin(
            df_2.loc[df_2["policy status"] == "good", "policy number"]
        )
    ]
)

输出结果是:

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

撰写回答