假设我具有以下DataFrame:
ID Color
1 Red
2 Yellow
1 Green
3 Red
1 Green
2 Red
让我们假设颜色的优先级如下:
Green > Yellow > Red
我想通过保留具有最高ID的ID来删除具有重复ID的行。因此,对于此示例,我想获得以下结果:
ID Color
1 Green
2 Yellow
3 Red
有什么想法可以通过使用pandas函数来实现吗?我已经在Internet上做了大量研究,包括熊猫文档,但没有想到一个好的方法。任何帮助将不胜感激。
答案 0 :(得分:3)
将颜色设置为带有订单的dtype类别后,您可以至少执行两种方法。
df['Color'] = pd.Categorical(df['Color'], categories=['Red','Yellow','Green'], ordered=True)
选项1:
df.sort_values('Color', ascending=False).drop_duplicates(['ID'])
输出:
ID Color
4 1 Green
1 2 Yellow
3 3 Red
选项2:
df.groupby('ID')['Color'].max()
输出:
ID
1 Green
2 Yellow
3 Red
Name: Color, dtype: object
答案 1 :(得分:2)
您可能需要使用map
,创建自己的订单dict
和drop_duplicates
df.iloc[df.Color.map({'Red':0,'Yellow':1,'Green':2}).argsort()].drop_duplicates('ID',keep='last')
Out[607]:
ID Color
3 3 Red
1 2 Yellow
4 1 Green