Вычитание между строками разных столбцов в проиндексированном фрейме данных в Python - PullRequest
0 голосов
/ 23 октября 2018

У меня есть индексированный фрейм данных (индексируется по типу, затем по дате), и я хотел бы выполнить вычитание между временем окончания верхней строки и временем начала следующей строки в часах:

type    date             start_time                  end_time       code
A      01/01/2018         01/01/2018 9:00       01/01/2018 14:00      525
       01/02/2018         01/02/2018 5:00       01/02/2018 17:00      524
       01/04/2018         01/04/2018 8:00       01/04/2018 10:00      528
B      01/01/2018         01/01/2018 5:00       01/01/2018 14:00      525
       01/04/2018         01/04/2018 2:00       01/04/2018 17:00      524
       01/05/2018         01/05/2018 7:00       01/05/2018 10:00      528

Я хотел бы получить результирующую таблицу с новым столбцом ['interval']:

type    date             interval
A      01/01/2018           -
       01/02/2018           15
       01/04/2018           39
B      01/01/2018           -
       01/04/2018           60
       01/05/2018           14

Интервал столбца в часах

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете преобразовать start_time и end_time в формат даты и времени, а затем использовать apply, чтобы вычесть end_time предыдущей строки в каждой группе (используя groupby).Чтобы преобразовать в часы, разделите на pd.Timedelta('1 hour'):

df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])

df['interval'] = (df.groupby(level=0,sort=False).apply(lambda x: x.start_time-x.end_time.shift(1)) / pd.Timedelta('1 hour')).values

>>> df
                         start_time            end_time    code    interval
type date                                                              
A    01/01/2018  2018-01-01 09:00:00  2018-01-01 14:00:00   525       NaN
     01/02/2018  2018-01-02 05:00:00  2018-01-02 17:00:00   524      15.0
     01/04/2018  2018-01-04 08:00:00  2018-01-04 10:00:00   528      39.0
B    01/01/2018  2018-01-01 05:00:00  2018-01-01 14:00:00   525       NaN
     01/04/2018  2018-01-04 02:00:00  2018-01-04 17:00:00   524      60.0
     01/05/2018  2018-01-05 07:00:00  2018-01-05 10:00:00   528      14.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...