我正在尝试在 pandas 数据框中创建一个新列,该列是明年相同 ID 的分数。请参阅下面的示例原始数据:Year ID Score2018 785 8.4 2018 770 -1.22017 733 3.22017 785 7.92018 733 3.9如果没有下一年的数据,则应填写 NA。所以我正在寻找的输出是:Year ID Score col2018 785 8.4 NA2018 770 -1.2 NA2017 733 3.2 3.92017 785 7.9 8.42018 733 3.9 NA数据当前未排序。
1 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
如果您的数据对于所有 ID 都有连续年份(没有带有 的 ID 2016 2018),那么您可以执行以下操作:
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
添加回答
举报
0/150
提交
取消