使用其他行中的值在DataFrame中创建新列

时间:2019-10-17 20:38:45

标签: python 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

当前未排序数据。

1 个答案:

答案 0 :(得分:3)

如果您的数据具有所有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