pandas groupby 每组的最新观察结果

Posted

技术标签:

【中文标题】pandas groupby 每组的最新观察结果【英文标题】:pandas groupby latest observation for each group 【发布时间】: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"))

最终的结果是:

【问题讨论】:

这能回答你的问题吗? Pandas dataframe get first row of each group 【参考方案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()

【讨论】:

以上是关于pandas groupby 每组的最新观察结果的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:选择每组的前几行

pandas组中的条件赋值,由

如何在 pandas 数据框中从 groupby 的结果生成所有值对

Pandas 数据框将数据聚合为每组的计数

从 pandas groupby 对象中选择多个组

Pandas groupby计算每n行的平均值