Python 删除列中的重复值在另一个列的值上删除

Python 删除列中的重复值在另一个列的值上删除,python,pandas,dataframe,Python,Pandas,Dataframe,我不确定解决问题的最佳方法。假设我有一个数据帧 id decision 1 Yes 3 No 2 Yes 2 No 4 No 4 No 我要做的是根据id列删除重复项,这样每个id类型只有一个实例。但是,对于具有多个实例的id,如果决策中的任何值为“是”,则在删除重复项后,剩余值的决策将为“是” 所以在本例中,输出看起来像这样,因为id匹配2的决定中至少有一个是肯定的 id decision 1 Yes 3 No 2

我不确定解决问题的最佳方法。假设我有一个数据帧

id    decision
1     Yes
3     No
2     Yes
2     No
4     No
4     No
我要做的是根据id列删除重复项,这样每个id类型只有一个实例。但是,对于具有多个实例的id,如果决策中的任何值为“是”,则在删除重复项后,剩余值的决策将为“是”

所以在本例中,输出看起来像这样,因为id匹配2的决定中至少有一个是肯定的

id    decision
1     Yes
3     No
2     Yes
4     No
我希望使用drop_duplicates(),但我仅根据第一个或最后一个实例来决定保留哪个副本,因为它们的顺序不同

有什么帮助吗?

IIUC

s=df.sort_values('decision').drop_duplicates('id',keep='last').sort_index()
   id decision
0   1      Yes
1   3       No
2   2      Yes
5   4       No

类似的东西可能会起作用(但它并不能维持秩序)——

import pandas as pd
df = pd.DataFrame({'id':[1,3,2,2,4,4], 'decision':['Yes', 'No', 'Yes', 'No', 'No', 'No']})
df 
    id decision
0   1      Yes
1   3       No
2   2      Yes
3   2       No
4   4       No
5   4       No

df.sort_values(['id', 'decision'], ascending=[True, False]).drop_duplicates(['id'], keep='first')
    id decision
0   1      Yes
2   2      Yes
1   3       No
4   4       No