Python Pandas-给定一个日期列,按ID在另一个列组中查找上一个日期
我有以下数据框Python Pandas-给定一个日期列,按ID在另一个列组中查找上一个日期,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有以下数据框 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','20
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'])
我想通过比较每个ID的一列中的给定日期(chkout)和另一列中的先前日期(chkin),生成一个名为“previous_Visite”的新列。预期输出应如下所示
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(一些自定义函数,df)
可能会解决这个问题,但我无法获得这样的函数。你能给我一些建议吗?提前谢谢。您可以使用shift
获取以前的值,即
df['prev'] = df.groupby('ID')['chkin'].shift()
输出:
ID chkin chkout prev
0 001 2017-01-01 2017-01-05 NaT
1002017-01-02 2017-01-10 NaT
2003 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
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