熊猫-根据序列中的条件,通过保留优先值来从DataFrame中删除重复的行

时间:2019-03-29 15:25:37

标签: python pandas

假设我具有以下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上做了大量研究,包括熊猫文档,但没有想到一个好的方法。任何帮助将不胜感激。

2 个答案:

答案 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,创建自己的订单dictdrop_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