给定数据框:
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个数据帧连接在一起 有更简单的方法吗?非常感谢!
答案 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])