Панды: рассчитать время с момента последнего измерения метки - PullRequest
0 голосов
/ 28 июня 2018

Мой набор данных имеет форму -

|   Time   | Category|
=====================
|   12:37  |  'one'  | 
|   12:39  |  'two'  | 
|   12:41  |  'two'  | 
|   12:45  |  'one'  |
|   12:46  |  'one'  | 

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

|   Time   | Category |  Since_last |
=====================================
|   12:37  |  'one'   |     0 min   |    (0 as it is the first measurement)
|   12:39  |  'two'   |     0 min   | 
|   12:41  |  'two'   |     2 min   | 
|   12:45  |  'one'   |     8 min   |
|   12:46  |  'one'   |     1 min   | 

Как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Время конвертирования

df['Time'] = pd.to_datetime(df['Time'],format= '%H:%M' ).dt.time

Используйте Groupby и Diff

df=pd.concat([df.Time, df.groupby('Category').Time.diff()],
          axis=1, keys=['Time','Diff']).fillna(0)

Конвертировать в минуты

df['Diff']=df['Diff'].apply(lambda x: f'{int(x.seconds/60)} min')

выход

    Time    Category
0   12:37:00    one
1   12:39:00    two
2   12:41:00    two
3   12:45:00    one
4   12:46:00    one
0 голосов
/ 28 июня 2018

Преобразуйте ваш временной ряд в timedelta, затем используйте groupby + diff:

df['Time'] = pd.to_timedelta(df['Time']+':00')
df['Diff'] = df.groupby('Category')['Time'].diff().fillna(0)

print(df)

      Time Category     Diff
0 12:37:00    'one' 00:00:00
1 12:39:00    'two' 00:00:00
2 12:41:00    'two' 00:02:00
3 12:45:00    'one' 00:08:00
4 12:46:00    'one' 00:01:00

Если для вас важно форматирование строки:

df['Diff'] = df['Diff'].apply(lambda x: f'{int(x.seconds/60)} min')

print(df)

      Time Category   Diff
0 12:37:00    'one'  0 min
1 12:39:00    'two'  0 min
2 12:41:00    'two'  2 min
3 12:45:00    'one'  8 min
4 12:46:00    'one'  1 min
...