大熊猫有效地删除重复组

时间:2018-03-19 20:29:41

标签: python pandas

给定数据框:

id  day  value
01  4    abc
01  3    abc
01  2    y
01  1    y
02  3    abc
02  2    x
02  1    x
03  4    abc
03  3    abc
03  2    abc
03  1    z

我想用" abc"删除行重复并保持最后。结果将是:

id  day  value
01  3    abc
01  2    y
01  1    y
02  3    abc
02  2    x
02  1    x
03  2    abc
03  1    z

截至目前,我能够做到这一点,但我使用的方法有点复杂。我用" abc"取出所有行。转到另一个数据帧,然后删除重复保持最后,然后将2个数据帧连接在一起 有更简单的方法吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

这是一种应该有效的方法。注意我保持最后,与你想要的输出一致。

res = pd.concat([df[df['value']=='abc'].drop_duplicates('id', keep='last'),
                 df[df['value']!='abc']]).sort_index()

#     id  day value
# 1    1    3   abc
# 2    1    2     y
# 3    1    1     y
# 4    2    3   abc
# 5    2    2     x
# 6    2    1     x
# 9    3    2   abc
# 10   3    1     z

答案 1 :(得分:2)

这应该有效。可能有一种更好的方法可以避免最后的排序。

df_abc = df[df.value=='abc'].drop_duplicates('id', keep='last')
df_not_abc = df[df.value!='abc']
df2 = pd.concat([df_abc, df_not_abc]).sort_values(by=['id', 'day'], 
    ascending=[True, False])