如何根据列中的最新日期聚合 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 material 和 purchaseDate
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 数据框中,没有重复