我有一个名为df的数据框,其中包含每个学生的多条记录。经常我想获取最后一个时间戳的记录。
如何以最佳方式实现这一目标?之前我一直使用last()函数,但它只返回最后一个非空值,而我实际上只想要最后一个值,无论是否为空。
使用apply(lambda r: r.iloc[-1])可以实现,但代码看起来不太美观(我讨厌使用apply函数,并且根据经验感觉它可能会慢和低效,很可能是因为apply的原因)。
请问有没有更好的方法来实现这个需求?
如何以最佳方式实现这一目标?之前我一直使用last()函数,但它只返回最后一个非空值,而我实际上只想要最后一个值,无论是否为空。
使用apply(lambda r: r.iloc[-1])可以实现,但代码看起来不太美观(我讨厌使用apply函数,并且根据经验感觉它可能会慢和低效,很可能是因为apply的原因)。
请问有没有更好的方法来实现这个需求?
(Pdb) df = pd.DataFrame([["A",2,3],["B",5,6],["A",np.NaN,4]], columns=["student", "value_a", "timestamp"]).sort_values("timestamp")
(Pdb) df
student value_a timestamp
0 A 2.0 3
2 A NaN 4
1 B 5.0 6
(Pdb) df.groupby("student").last()
# This gives the wrong answer
value_a timestamp
student
A 2.0 4
B 5.0 6
(Pdb) df.groupby("student").apply(lambda r: r.iloc[-1])
# This gives the right answer but feels inefficient
student value_a timestamp
student
A A NaN 4
B B 5.0 6