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