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