如何根据列中的最新日期聚合 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)
两步
sort_values()
material 和 购买日期
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
我有一个包含 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)
两步
sort_values()
material 和 购买日期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 |