【问题标题】:pandas groupby latest observation for each grouppandas groupby 每组的最新观察结果
【发布时间】:2020-11-05 08:08:21
【问题描述】:

我有一个面板数据框(ID 和时间)并希望收集每个 ID 的最近(最新)行。这是表格:

df = pd.DataFrame({'ID': [1,1,2,3] , 'Year': [2018,2019,2019,2020] , 'Var1':list("abcd") , 'Var2': list("efgh")})

最终的结果是:

【问题讨论】:

标签: python pandas


【解决方案1】:

使用 drop_duplicates:

df.sort_values('Year').drop_duplicates('ID', keep='last')

输出:

   ID  Year Var1 Var2
1   1  2019    b    f
2   2  2019    c    g
3   3  2020    d    h

【讨论】:

  • 是的,你可以像@Roy2012那样使用groupby方法。
  • 我不确定@ROy2012 解决方案中的last() 方法是否基于时间排序。我想确保我得到最新的日期/年份。
  • @Roo df.sort_values('Year').groupby("ID").last() 将确保这一点。对数据框进行适当的排序,然后 groupby 将执行此操作。
【解决方案2】:

使用tail:

df.groupby("ID").tail(1)

输出是:

   ID  Year Var1 Var2
1   1  2019    b    f
2   2  2019    c    g
3   3  2020    d    h

另一种选择是使用last

df.groupby("ID").last()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2013-07-14
    • 2017-02-28
    相关资源
    最近更新 更多