【问题标题】:Filter the duplicate rows of a pandas dataframe, keeping rows with the latest date only过滤熊猫数据框的重复行,仅保留最新日期的行
【发布时间】:2021-02-14 22:50:01
【问题描述】:

我有一个熊猫数据框:

d = {'title':['GrownUps', 'Toy Story', 'Toy Story', 'Avatar', 'Avatar', 'Avatar'], 'year': [2012, 1995, 2000, 2005, 2006, 2010]}
dataset=pd.DataFrame(d)

从上面的数据框中,我想找到重复的电影标题(即玩具总动员、阿凡达)。为此,我使用以下代码:

dataset[dataset.duplicated(subset=['title'],keep=False)]

从返回的行中,我想为每个重复的电影保留最新的(例如year 列的最大值)并将没有最大年份的行的索引存储到列表中,以便我可以过滤它们来自初始数据集。

所以我的最终数据集应该是这样的:

d = {'title':['GrownUps', 'Toy Story', 'Avatar'], 'year': [2012, 2000, 2010]}
dataset=pd.DataFrame(d)

我只保留了 2000 年的玩具总动员而不是 1995 年,以及 2010 年的阿凡达而不是 2005 年或 2006 年

如果有人想使用不同的聚合而不是 max(),这可能非常有用,例如 mean()sum() 等。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我们可以按“年份”的升序排序,然后在“标题”上删除重复项,保留最后一行(因为它有最近的年份),然后恢复原来的行顺序:

    df.sort_values('year').drop_duplicates('title', keep='last').sort_index()
    
           title  year
    0   GrownUps  2012
    2  Toy Story  2000
    5     Avatar  2010
    

    这避免了 groupBy 操作(相对较慢)并保持行的原始顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2021-10-12
      • 2020-05-05
      • 2013-06-09
      • 2017-05-10
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多