Python 计算同一ID组内连续日期时间值之间的天数差

Python 计算同一ID组内连续日期时间值之间的天数差,python,pandas,Python,Pandas,我试图计算同一ID内连续日期时间值之间的天数差 以下是我的数据帧和代码: d = {'ID': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c'], 'date': ['10/1/2010','10/1/2010','10/10/2010','10/10/2010','1/1/2001','3/1/2001','3/1/2001','6/1/2001','1/1/1990','3/1/1990','6/1/1990']} df = p

我试图计算同一ID内连续日期时间值之间的天数差

以下是我的数据帧和代码:

d = {'ID': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c'],
'date': ['10/1/2010','10/1/2010','10/10/2010','10/10/2010','1/1/2001','3/1/2001','3/1/2001','6/1/2001','1/1/1990','3/1/1990','6/1/1990']}

df = pd.DataFrame(d)
df['date'] = pd.to_datetime(df['date'])
df['Days'] = df.groupby('ID')['date'].diff().fillna('')
df 
但是,当连续日期彼此相同时,我得到“0天”

例如,有两个“2010-10-10”是ID“a”的成员;带有“2010-10-10”的第一行的值为“9天”,但第二行返回“0天”。我的目标是编写一个代码,使两者都有“9天”。

您可以用nan替换0,然后进行正向填充:

import numpy as np
import pandas as pd
df['Days'] = (df.groupby('ID', group_keys=False)
                .apply(lambda g: g['date'].diff().replace(0, np.nan).ffill()))
df