使用来自不同行的值在 DataFrame 中创建新列

我正在尝试在 pandas 数据框中创建一个新列,该列是明年相同 ID 的分数。请参阅下面的示例原始数据:


Year  ID    Score

2018  785   8.4 

2018  770   -1.2

2017  733   3.2

2017  785   7.9

2018  733   3.9

如果没有下一年的数据,则应填写 NA。所以我正在寻找的输出是:


Year  ID    Score col

2018  785   8.4   NA

2018  770   -1.2  NA

2017  733   3.2   3.9

2017  785   7.9   8.4

2018  733   3.9   NA

数据当前未排序。



幕布斯6054654
浏览 85回答 1
1回答

料青山看我应如是

如果您的数据对于所有 ID 都有连续年份(没有带有 的 ID 2016 2018),那么您可以执行以下操作: df['col'] = df.sort_values('Year').groupby('ID').Score.shift(-1)输出:   Year   ID  Score  col0  2018  785    8.4  NaN1  2018  770   -1.2  NaN2  2017  733    3.2  3.93  2017  785    7.9  8.44  2018  733    3.9  NaN如果不能保证年份是连续的,则进行合并:df.merge(df.assign(Year=lambda x: x.Year - 1),         on=['Year', 'ID'],         suffixes = ['','_new'],         how='left')输出:   Year   ID  Score  Score_new0  2018  785    8.4        NaN1  2018  770   -1.2        NaN2  2017  733    3.2        3.93  2017  785    7.9        8.44  2018  733    3.9        NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python