これは以下に少し関連しています:別のレベル上の階層レベルの最大値を見つける
この質問では、特定の値に対する最新の観測値を見つける方法を尋ねています。たとえば、さまざまな都市のさまざまな日付に一連の観測があるとします。各都市の最新の観察結果を取り上げます。以下の例では、観察は値 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 列は日時列です。質問の目的のためだけに、文字列のように見せました。