Pandas 如果ID相同,则逐行减去日期

Pandas 如果ID相同,则逐行减去日期,pandas,Pandas,如果下一行的id相同,我想减去日期。我能够减去日期,但仍然坚持创建条件来检查下一行是否具有相同的id d = {'date':['2021-01', '2020-01', '2020-05', '2021-01'], 'id':['a', 'a', 'b', 'b']} df = pd.DataFrame(data=d) 我的代码 df = df.sort_values(by=['id', 'date']) df['date_diff'] = pd.to_datetime(df['date']

如果下一行的id相同,我想减去日期。我能够减去日期,但仍然坚持创建条件来检查下一行是否具有相同的id

d = {'date':['2021-01', '2020-01', '2020-05', '2021-01'], 'id':['a', 'a', 'b', 'b']}
df = pd.DataFrame(data=d)
我的代码

df = df.sort_values(by=['id', 'date'])
df['date_diff'] = pd.to_datetime(df['date']) - pd.to_datetime(df['date'].shift())
结果

date    id  date_diff
2020-01 a   NaT
2021-01 a   366 days
2020-05 b   -245 days
2021-01 b   245 days
预期结果如下所示,仅当ID相同时才减去日期

与groupby连锁

与groupby连锁


6秒慢的人@wwnde啊投票给U6秒慢的人@wwnde ah投票支持美国
date    id  date_diff
2020-01 a   NaT
2021-01 a   366 days
2020-05 b   -245 days
2021-01 b   245 days
df['date']=pd.to_datetime(df['date'])
df['date_diff']=df.groupby('id')['date'].diff()
df['date'] = pd.to_datetime(df['date'])
df['date_diff'] = df.groupby('id')['date'].diff()