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

Posted

技术标签:

【中文标题】如何根据列中的最新日期聚合 pandas 数据框中的行?【英文标题】:How do I aggregate rows in a pandas dataframe according to the latest dates in a column? 【发布时间】:2021-07-22 03:00:25 【问题描述】:

我有一个包含材料、购买日期和购买价格的数据框。我想过滤我的数据框,以便我只保留包含每种材料的一行,并且该行包含最新购买日期的材料和相应的价格。

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

【问题讨论】:

在下面发布了我的答案。如果您发布一些示例数据,我可以确认一切正常。如果没有,以下应该可以正常工作(多次完成)。 非常感谢!像魅力一样工作。你是个传奇。 没问题,如果您不介意接受我的回答,我将不胜感激! 【参考方案1】:

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

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)

【讨论】:

【参考方案2】:

两步

    sort_values() by ma​​terialpurchaseDate groupby() 材料并占据第一行
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

【讨论】:

以上是关于如何根据列中的最新日期聚合 pandas 数据框中的行?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 pandas 数据框中的数据类型填充 NaN 值?

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

使用 BeautifulSoup 从表的前两列中提取日期并将它们排列在 Pandas 数据框中,没有重复

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

将 unix 时间转换为 pandas 数据框中的可读日期

如何从python中的pandas数据框中的列中提取关键字(字符串)