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()]
。但是如何根据上面指定的条件删除?
答案 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_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