如果给定一个日期列,请按ID在另一个列组中查找上一个日期

2024-04-25 18:09:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据框

df = pd.DataFrame({'ID':['001','002','003','001','002','001'],
                   'chkin':['2017-01-01','2017-01-02','2017-01-03','2017-01-20','2017-01-15','2017-03-06'],
                   'chkout':['2017-01-05','2017-01-10','2017-01-04','2017-01-27','2017-01-31','2017-03-10']})
df['chkin'] = pd.to_datetime(df['chkin'])
df['chkout'] = pd.to_datetime(df['chkout'])

我想通过比较一列(chkout)中的给定日期和另一列(chkin)中每个ID的先前日期,生成一个名为'previous\u visit'的新列。你知道吗

 ID       chkin      chkout      previous_visit
001    2017-01-01   2017-01-05         NaT
002    2017-01-02   2017-01-10         NaT
003    2017-01-03   2017-01-04         NaT
001    2017-01-20   2017-01-27     2017-01-01
002    2017-01-15   2017-01-31     2017-01-02
001    2017-03-06   2017-03-10     2017-01-20

我认为使用df.groupby('ID').transform(some_custom_function, df)可以解决这个问题,但是我无法获得这样一个函数。你能给我一些建议吗?先谢谢你。你知道吗


Tags: to数据iddataframedfdatetimetransformvisit
1条回答
网友
1楼 · 发布于 2024-04-25 18:09:29

您可以使用shift来获取前面的值,即

df['prev'] = df.groupby('ID')['chkin'].shift()

输出:

   ID      chkin     chkout       prev
0  001 2017-01-01 2017-01-05        NaT
1  002 2017-01-02 2017-01-10        NaT
2  003 2017-01-03 2017-01-04        NaT
3  001 2017-01-20 2017-01-27 2017-01-01
4  002 2017-01-15 2017-01-31 2017-01-02
5  001 2017-03-06 2017-03-10 2017-01-20
 

相关问题 更多 >