【问题标题】:Remove duplicate rows in pandas dataframe based on condition根据条件删除熊猫数据框中的重复行
【发布时间】:2017-10-04 11:58:12
【问题描述】:
            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()]。但是如何根据上面指定的条件删除呢?

【问题讨论】:

标签: python pandas


【解决方案1】:

在按值对 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

【讨论】:

  • 这是更好的解决方案!但是,您不需要ascending=False。我会把它改成df.sort_values('valu').groupby(level=0).tail(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

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2021-04-14
    • 2021-04-19
    相关资源
    最近更新 更多