首页 > 解决方案 > 当相同 id 的状态发生变化时删除重复值

问题描述

我想删除规则显示 NOT_OK 的行,而对于一个值,它对于同一个 ID 已经确定。

而对于一个 id,如果所有值都是 NOT_OK,则保留所有值。

例如,对于这个数据集:

ID RULE
1   OK
1   NOT_OK
2   NOT_OK
2   NOT_OK

期望的输出:

ID RULE
1    OK
2   NOT_OK
2   NOT_OK

标签: pythonpandasduplicatesconditional-statements

解决方案


假设您的数据集是变量“df”中的数据框。可能有一种更有效的方法,但这有效:

ok_records = list(df['ID'][df['RULE'] == 'OK'])
df1 = df[(df['ID'].isin(ok_records)) & (df['RULE'] != 'NOT_OK')]
df2 = df[(df['RULE'] == 'NOT_OK') & (~df['ID'].isin(ok_records))]
final_df = pd.concat([df1, df2])

推荐阅读