我有以下数据框:
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
答案 0 :(得分:3)
您可以使用 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
:< / p>
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
答案 1 :(得分:1)
您也可以使用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