在 Pandas 中获取与 groupby 中同一列中日期的天数差异

Getting days difference from dates in same column in a groupby in Pandas

我有一个这样的 pandas 数据框:

user_id code earliest_date
A N18.1 2016-04-08
A N18.2 2017-06-08
A N18.3 2018-04-08
B N18.1 2016-06-16
B N18.2 2016-08-16
C N18.1 2021-01-11

在代码列中,值总是形成一个指定的列表,这里是[N18.1,N18.2,N18.3]等

我想要一个数据框,显示每个用户从代码 N18.x 依次进入下一个代码所需的天数。我在想这样的事情:

user_id N18.1 -> N18.2 N18.2 -> N18.3
A 426 304
B 60 n/a
C n/a n/a

非常感谢您的帮助。

使用DataFrameGroupBy.diff for differecies per groups, create helper column for shifted code and pass to DataFrame.pivot:

df['earliest_date'] = pd.to_datetime(df['earliest_date'])

df['diff'] = df.groupby('user_id')['earliest_date'].diff().dt.days
df['code1'] = df.groupby('user_id')['code'].shift() + '->' + df['code']

df = df.pivot('user_id','code1','diff').drop(np.nan, axis=1)
print (df)
code1    N18.1->N18.2  N18.2->N18.3
user_id                            
A               426.0         304.0
B                61.0           NaN
C                 NaN           NaN