首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何只返回Pandas中最近的行?

如何只返回Pandas中最近的行?
EN

Stack Overflow用户
提问于 2020-09-16 08:45:23
回答 3查看 82关注 0票数 0

我正在处理候选人的求职申请,一些候选人提交了多份申请,我的目标是将数据集减少到每个候选人的最新申请。

我的代码如下:

代码语言:javascript
运行
复制
import pandas as pd

data = {'application_date' : ["9/11/2020 10:30:31", "9/11/2020 11:07:59", "9/11/2020 11:09:02", "9/14/2020 13:14:31", "9/14/2020 13:15:15"],
        'candidate_id' : ["001", "002", "002", "002", "002"]
       }

df = pd.DataFrame(data)

df['application_date'] = pd.to_datetime(df['application_date'])

df['rank_application'] = df.groupby('candidate_id')['application_date'].rank(method='first')

这将返回以下内容:

代码语言:javascript
运行
复制
     application_date candidate_id  rank_application
0 2020-09-11 10:30:31          001               1.0
1 2020-09-11 11:07:59          002               1.0
2 2020-09-11 11:09:02          002               2.0
3 2020-09-14 13:14:31          002               3.0
4 2020-09-14 13:15:15          002               4.0

这就是我被卡住的地方。从这里开始,我不知道如何仅将df减少到每个candidate_id的最新值。我原本希望按降序排序,然后找出如何取rank_application =1的行(但我想不出来)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-16 08:59:19

这是你需要的:

代码语言:javascript
运行
复制
import pandas as pd

data = {'application_date' : ["9/11/2020 10:30:31", "9/11/2020 11:07:59", "9/11/2020 11:09:02", "9/14/2020 13:14:31", "9/14/2020 13:15:15"],
        'candidate_id' : ["001", "002", "002", "002", "002"]
       }

df = pd.DataFrame(data)

df['application_date'] = pd.to_datetime(df['application_date'], infer_datetime_format=True)

result = df.iloc[df.groupby('candidate_id')['application_date'].agg(pd.Series.idxmax)]

print(result)

结果:

代码语言:javascript
运行
复制
     application_date candidate_id
0 2020-09-11 10:30:31          001
4 2020-09-14 13:15:15          002

.iloc[]采用一系列索引来获取适当的行。可能需要pd.to_datetime语句来强制application_date成为pd.Series.idxmax工作所需的适当日期时间格式。

票数 1
EN

Stack Overflow用户

发布于 2020-09-16 09:44:54

首先,因为这是时间数据中的排序和选择,所以您应该将列转换为pandas date_time,以便pd.to_datetime能够很好地操作pandas。

然后,您可以通过选择df['application_date'].agg(pd.Series.idxmax)时间序列中的最大值来选择'application_date‘。但是,因为您要在不同的id或排名中查找最新的时间,所以需要添加一个groupby来帮助最大限度地选择每个id。

代码语言:javascript
运行
复制
df.groupby('candidate_id')['application_date'].agg(pd.Series.idxmax)

如果你想选择申请日期:你可以很容易地通过iloc索引他们

代码语言:javascript
运行
复制
df.iloc[df.groupby('candidate_id')['application_date'].agg(pd.Series.idxmax)]
票数 1
EN

Stack Overflow用户

发布于 2021-09-19 06:01:13

我对这个答案有点晚了。当我在搜索类似的东西时,我偶然发现了这篇文章。

这是我在尝试查找最新记录时通常会做的事情。

代码语言:javascript
运行
复制
df['rank_application'] = df.groupby('candidate_id')['application_date'].rank(method='first', ascending=False)
df = df[df.rank_application == 1]

问题中发布的初始方法是我遵循的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63911616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档