计算 pandas 中的日期差(以天为单位)

Eth*_*han 1 python dataframe pandas difference

我有一个看起来像这样的数据框

    date        id
0   2019-01-15  c-15-Jan-2019-0
1   2019-01-26  c-26-Jan-2019-1
2   2019-02-02  c-02-Feb-2019-2
3   2019-02-15  c-15-Feb-2019-3
4   2019-02-23  c-23-Feb-2019-4
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为“days_since”的新列,显示自上次记录以来已经过去的天数。例如,新列将是

    date        id              days_since
0   2019-01-15  c-15-Jan-2019-0 NaN
1   2019-01-26  c-26-Jan-2019-1 11
2   2019-02-02  c-02-Feb-2019-2 5
3   2019-02-15  c-15-Feb-2019-3 13
4   2019-02-23  c-23-Feb-2019-4 7
Run Code Online (Sandbox Code Playgroud)

我尝试使用

df_c['days_since'] = df_c.groupby('id')['date'].diff().apply(lambda x: x.days)

但这只是返回了一列充满空值的列。日期列充满了日期时间对象。有任何想法吗?

Wil*_*sem 5

我认为你把它弄得太复杂了,因为该date列包含日期时间数据,你可以使用:

>>> df['date'].diff()
0       NaT
1   11 days
2    7 days
3   13 days
4    8 days
Name: date, dtype: timedelta64[ns]
Run Code Online (Sandbox Code Playgroud)

或者如果您想要天数:

>>> df['date'].diff().dt.days
0     NaN
1    11.0
2     7.0
3    13.0
4     8.0
Name: date, dtype: float64
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用以下方式分配天数:

df['days_since'] = df['date'].diff().dt.days
Run Code Online (Sandbox Code Playgroud)

这给了我们:

>>> df
        date  days_since
0 2019-01-15         NaN
1 2019-01-26        11.0
2 2019-02-02         7.0
3 2019-02-15        13.0
4 2019-02-23         8.0
Run Code Online (Sandbox Code Playgroud)