值从一列到另一列的条件复制

2024-04-20 07:44:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据帧,看起来像这样:

 name        job             jobchange_rank   date
Thisguy      Developer       1                2012
Thisguy      Analyst         2                2014
Thisguy      Data Scientist  3                2015
Anotherguy   Developer       1                2018

职位变动排名代表每个人(基于姓名)的职位变动排名,其中排名1代表他/她的第一个职位,排名2代表他/她的第二个职位,等等

现在是有趣的部分。我想创建一个新的列,在这里我可以看到一个人以前的工作,类似这样:

 name        job             jobchange_rank   date   previous_job
Thisguy      Developer       1                2012   None
Thisguy      Analyst         2                2014   Developer
Thisguy      Data Scientist  3                2015   Analyst
Anotherguy   Developer       1                2018   None

我创建了以下代码来获取没有职务更改的“None”值:

df.loc[df['jobchange_rank'].sub(df['jobchange_rank'].min()) == 0, 'previous_job'] = 'None'  

遗憾的是,我似乎不知道如何从需要的条件应用的另一列中获取值。你知道吗

欢迎任何帮助! 提前谢谢。你知道吗


Tags: namenonedeveloperdfdatadate职位job
1条回答
网友
1楼 · 发布于 2024-04-20 07:44:06

这个答案假设您的数据帧是按namejobchange_rank排序的,如果不是这样,请先排序。你知道吗


# df = df.sort_values(['name', 'jobchange_rank'])

m = df['name'].eq(df['name'].shift())
df['job'].shift().where(m)

0          NaN
1    Developer
2      Analyst
3          NaN
Name: job, dtype: object

或者使用groupby+shift(假设至少按jobchange_rank排序)

df.groupby('name')['job'].shift()

0          NaN
1    Developer
2      Analyst
3          NaN
Name: job, dtype: object

尽管groupby+shift更简洁,但是在较大的输入上,如果您的数据已经像您的示例那样进行了排序,那么避免使用groupby并使用第一种解决方案可能会更快。你知道吗

相关问题 更多 >