根据条件删除pandas数据帧中的重复行

时间:2017-05-05 22:15:57

标签: python pandas

            is_avail   valu data_source
2015-08-07     False  0.282    source_a
2015-08-07     False  0.582    source_b
2015-08-23     False  0.296    source_a
2015-09-08     False  0.433    source_a
2015-10-01      True  0.169    source_b

在上面的数据框中,我希望通过在valu列中保留更高值的行来删除重复的行(即重复索引的行)。

我可以删除包含重复索引的行,如下所示:

df = df[~df.index.duplicated()]。但是如何根据上面指定的条件删除?

2 个答案:

答案 0 :(得分:3)

在按照值对df进行排序后,您可以在索引上使用groupby。

df.sort_values(by='valu', ascending=False).groupby(level=0).first()
Out[1277]: 
           is_avail   valu data_source
2015-08-07    False  0.582    source_b
2015-08-23    False  0.296    source_a
2015-09-08    False  0.433    source_a
2015-10-01     True  0.169    source_b

答案 1 :(得分:2)

drop_duplicateskeep='last'

一起使用
df.rename_axis('date').reset_index() \
    .sort_values(['date', 'valu']) \
    .drop_duplicates('date', keep='last') \
    .set_index('date').rename_axis(df.index.name)

           is_avail   valu data_source
2015-08-07    False  0.582    source_b
2015-08-23    False  0.296    source_a
2015-09-08    False  0.433    source_a
2015-10-01     True  0.169    source_b