这与以下内容略有相关:在另一个级别上查找层次结构级别的最大值
在这个问题中,我要问如何找到给定值的最新观察结果。例如,假设我在不同的日期对不同的城市进行了一系列观察。我会对每个城市进行最近的观察。在下面的示例中,观察值是值 v1、v2、v3 的元组
假设我有一个这样的数据框:
city obs_dt v1 v2 v3
LA 1/1/12 13 99 89
LA 1/1/13 2 2 1
NY 1/1/11 4 2 1
NY 1/1/13 2 22 1
NY 1/9/13 3 2 1
Bo 1/9/13 2 23 1
我想要一个看起来像这样的结果:
city obs_dt v1 v2 v3
LA 1/1/13 2 2 1
NY 1/9/13 3 2 1
Bo 1/9/13 2 23 1
目前我正在解决这个问题:
most_recent_dates = raw_data.groupby(["city"]).max()
most_recent_dates_idxed = most_recent_dates.set_index("obs_dt", append=True)
raw_data_idxed = raw_data.set_index(["city", "obs_dt"])
newest_raw = raw_data_idxed.join(most_recent_dates_idxed, how="inner", rsuffix="_max")
newest = newest_raw.drop(labels=(x for x in newest_raw if x.endswith("_max")), axis=1)
这似乎有很多代码来完成我想要的。
以前我正在寻找的是按列的 argmax 索引另一列。
obs_dt 列是一个日期时间列。出于问题的目的,我使它看起来像一个字符串。