根据条件删除熊猫数据框中的重复行

use*_*827 3 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
Run Code Online (Sandbox Code Playgroud)

在上面的数据框中,我想通过保留列中具有较高值的​​行来删除重复的行(即重复索引的行)valu

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

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

All*_*len 5

在按值对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
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

drop_duplicates与使用keep='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
Run Code Online (Sandbox Code Playgroud)