Итерировать по уникальным датам в кадре данных Pandas - PullRequest
1 голос
/ 09 июля 2020

У меня есть такой pandas фрейм данных

id        date      time    dif
01  2020-04-02  09:44:00
02  2020-04-02  09:50:23
03  2020-04-02  09:54:56
04  2020-04-03  10:24:42
05  2020-04-03  10:32:12
06  2020-04-03  11:12:21
...

Я пытаюсь вычислить разницу во времени в минутах между каждой строкой и предыдущей за день. Таким образом, результат должен быть таким это так просто ...

1 Ответ

1 голос
/ 09 июля 2020

Используйте DataFrameGroupBy.diff с Series.dt.total_seconds и Series.round:

df['time'] = pd.to_timedelta(df['time'])

df['dif'] = df.groupby('date')['time'].diff(-1).dt.total_seconds().div(60).round().mul(-1)

Или используйте DataFrameGroupBy.shift с вычитанием:

df['dif'] = (df.groupby('date')['time'].shift(-1)
               .sub(df['time'])
               .dt.total_seconds()
               .div(60)
               .round())
print (df)
   id        date     time   dif
0   1  2020-04-02 09:44:00   6.0
1   2  2020-04-02 09:50:23   5.0
2   3  2020-04-02 09:54:56   NaN
3   4  2020-04-03 10:24:42   8.0
4   5  2020-04-03 10:32:12  40.0
5   6  2020-04-03 11:12:21   NaN
...