Вы можете использовать groupby
и shift
для заполнения следующего доступного значения, однако в этом случае строки без следующей доступной даты останутся как NaN
:
df.assign(ndate=df.groupby('country').date.shift(-1))
date country ndate
0 6/1/18 USA 6/4/18
1 6/1/18 BEL 6/5/18
2 6/4/18 USA 6/6/18
3 6/5/18 BEL NaN
4 6/6/18 USA NaN
Если вы хотите заполнить эти значения последней датой, вы можете просто fillna
с помощью столбца date
:
df.assign(ndate=df.groupby('country').date.shift(-1)).fillna({'ndate': df.date})
date country ndate
0 6/1/18 USA 6/4/18
1 6/1/18 BEL 6/5/18
2 6/4/18 USA 6/6/18
3 6/5/18 BEL 6/5/18
4 6/6/18 USA 6/6/18