使用不同行中的值在数据帧中创建新列



我正在尝试在熊猫数据帧中创建一个新列,该列是明年相同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

数据当前未排序。

如果您的数据具有所有 ID 的连续年份(没有带有2016 2018的 ID(,那么您可以执行以下操作:

df['col'] = df.sort_values('Year').groupby('ID').Score.shift(-1)

输出:

Year   ID  Score  col
0  2018  785    8.4  NaN
1  2018  770   -1.2  NaN
2  2017  733    3.2  3.9
3  2017  785    7.9  8.4
4  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_new
0  2018  785    8.4        NaN
1  2018  770   -1.2        NaN
2  2017  733    3.2        3.9
3  2017  785    7.9        8.4
4  2018  733    3.9        NaN

最新更新