[英]pandas - create new column based off of 'next' row value
我有以下數據框:
date country
6/1/18 USA
6/1/18 BEL
6/4/18 USA
6/5/18 BEL
6/6/18 USA
我想創建一個列,告訴您相應國家/地區的下一個日期。 如果有幫助,您可以假定日期已排序。 如果日期是該國家/地區的最后日期,則可以使用相同的日期或空值填寫下一個日期。
date country next_date
6/1/18 USA 6/4/18
6/1/18 BEL 6/5/18
6/4/18 USA 6/6/18
6/5/18 BEL 6/5/18
6/6/18 USA 6/6/18
您可以使用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
您也可以使用transform
。 我選擇將最終日期保留為NaN值。
>>> df.assign(next_date=df.groupby('country')['date'].transform(
lambda group: group.shift(-1)))
date country next_date
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.