如何根据列中的最新日期聚合 pandas 数据框中的行?

How do I aggregate rows in a pandas dataframe according to the latest dates in a column?

我有一个包含 materials、购买日期和购买价格的数据框。我想过滤我的数据框,这样我只保留一行包含每个 material,并且该行包含最新购买日期和相应价格的 material。

我怎样才能做到这一点?我绞尽脑汁想弄清楚如何将聚合函数应用于此,但我就是想不通。

进行多重排序,然后使用删除重复项,保留第一次出现。

import pandas as pd

df.sort_values(by=['materials', 'purchase_date'], ascending=[True, False], inplace=True)
df.drop_duplicates(subset=['materials'], keep='first', inplace=True)

两步

  1. sort_values() material购买日期
  2. groupby() material 并占据第一行
d = pd.date_range("1-apr-2020", "30-oct-2020", freq="W")

df = pd.DataFrame({"material":np.random.choice(list("abcd"),len(d)), "purchaseDate":d, "purchasePrice":np.random.randint(1,100, len(d))})
df.sort_values(["material","purchaseDate"], ascending=[1,0]).groupby("material", as_index=False).first()

输出

material purchaseDate purchasePrice
0 a 2020-09-27 00:00:00 85
1 b 2020-10-25 00:00:00 54
2 c 2020-10-11 00:00:00 21
3 d 2020-10-18 00:00:00 45