Я пытаюсь добавить столбец C_End в DataFrame в Pandas, который выглядит примерно так:
df = pd.DataFrame({'ID':[123,123,123,456,456,789],
'C_ID':[8,10,35,36,40,7],
'C_Type':['New','Renew','Renew','New','Term','New'],
'Rank':[1,2,3,1,2,1]})
Новый столбец должен быть следующим C_Type для каждого идентификатора.основанный на 'Rank', в результате чего DataFrame выглядит следующим образом:
ID C_ID C_Type Rank C_End
0 123 8 New 1 Renew
1 123 10 Renew 2 Renew
2 123 35 Renew 3 None
3 456 36 New 1 Term
4 456 40 Term 2 None
5 789 7 New 1 None
По сути, я хочу найти строку, где ID = ID и Rank = Rank + 1, и назначить C_Type новому столбцу C_End.Я пытался создать функцию и использовать Apply (ниже), но это заняло целую вечность и в итоге дало мне ошибку.Я все еще новичок в Pandas и Python в целом, но я чувствую, что должно быть простое решение, которого я не вижу.
def get_next_c_type(row):
return df.loc[(df['id'] == row['id']) & (df['rank'] == row['rank'] + 1),'c_type']
df['c_end'] = df.apply(get_next_c_type, axis = 1)