比较两个数据框并移除不合格项
我有两个数据框(数据表)。我试着生成了一些简单的数据来说明我想要的结果,任何建议或帮助都非常感谢。
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