Python 值从一列到另一列的条件副本

Python 值从一列到另一列的条件副本,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像这样: name job jobchange_rank date Thisguy Developer 1 2012 Thisguy Analyst 2 2014 Thisguy Data Scientist 3 2015 Anotherguy Developer

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

 name        job             jobchange_rank   date
Thisguy      Developer       1                2012
Thisguy      Analyst         2                2014
Thisguy      Data Scientist  3                2015
Anotherguy   Developer       1                2018
 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
职位变动排名表示每个人(基于姓名)的职位变动排名,其中排名nr 1表示其第一个职位nr 2表示其第二个职位,以此类推

现在来看有趣的部分。我想创建一个新列,在其中可以看到一个人以前的工作,如下所示:

 name        job             jobchange_rank   date
Thisguy      Developer       1                2012
Thisguy      Analyst         2                2014
Thisguy      Data Scientist  3                2015
Anotherguy   Developer       1                2018
 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'  
遗憾的是,我似乎不知道如何从应用所需条件的另一列中获取值

欢迎任何帮助!
提前感谢。

此答案假设您的数据帧按
名称和
作业更改_排名进行排序,如果不是这样,请先排序


或者使用
groupby
+
shift
(假设至少按
jobchange\u秩排序)



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

感谢您的快速回复和建议!它工作得很好。
df.groupby('name')['job'].shift()
0          NaN
1    Developer
2      Analyst
3          NaN
Name: job, dtype: object