基于时间列的最新值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于时间列的最新值相关的知识,希望对你有一定的参考价值。

我下面有mydf,已在虚拟time列和id上进行了排序:

mydf = pd.DataFrame(
    {
        'id': ['A', 'B', 'B', 'C', 'A', 'C', 'A'],
        'time': [1, 4, 3, 5, 2, 6, 7],
        'val': ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    }
).sort_values(['id', 'time'], ascending=False)

mydf
    id  time    val
5   C   6       f
3   C   5       d
1   B   4       b
2   B   3       c
6   A   7       g
4   A   2       e
0   A   1       a

我想添加一列(last_val),对于每个唯一的id,该列都基于val列保存最新的time。可以删除没有last_val的条目。此示例中的输出如下所示:

mydf
    id  time    val last_val
5   C   6       f   d
1   B   4       b   c
6   A   7       g   e
4   A   2       e   a 

有什么想法吗?

答案

用途:

mydf['last_val'] = mydf.groupby('id')['val'].shift(-1)
mydf = mydf.dropna(subset=['last_val'])

或:

mydf['last_val'] = mydf.groupby('id')['val'].shift(-1)
mydf = mydf[mydf['id'].duplicated(keep='last')]

print (mydf)
  id  time val last_val
5  C     6   f        d
1  B     4   b        c
6  A     7   g        e
4  A     2   e        a

以上是关于基于时间列的最新值的主要内容,如果未能解决你的问题,请参考以下文章

获取基于另一列的条件成立的每一行的最新记录(Hive SQL)

在 sqlalchemy 中使用 distinct()/group_by() 获取基于每个“名称”列的最新记录

获取表中不同列的最新 NOT NULL 值,按公共列分组

一个基于列值的新列中对应列的添加值

基于R中其他列的列值总和[重复]

当percentile_approx基于groupby返回特定列的单个值时,如何选择另一列的对应值?