大熊猫-根据“下一个”行值创建新列

时间:2018-09-06 19:16:27

标签: python pandas dataframe

我有以下数据框:

   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

2 个答案:

答案 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