Создать новый столбец в DataFrame, используя значения из другой строки - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь создать в столбце данных pandas новый столбец, в котором будет указан тот же идентификатор в следующем году. См. Пример исходных данных ниже:

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 Ответ

3 голосов
/ 17 октября 2019

Если ваши данные имеют последовательные годы для всех идентификаторов (без идентификатора с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...