У меня есть набор идентификаторов и временных меток, и я хочу вычислить «общее время, прошедшее на один идентификатор», получая разницу самых старых / самых ранних временных меток, сгруппированных по идентификатору.
Данные
id timestamp
1 2018-02-01 03:00:00
1 2018-02-01 03:01:00
2 2018-02-02 10:03:00
2 2018-02-02 10:04:00
2 2018-02-02 11:05:00
Ожидаемый результат
( Я хочу, чтобы дельта конвертировалась в минуты )
id delta
1 1
2 62
У меня есть цикл for, но он очень медленный (10+мин для 1M + рядов).Мне было интересно, если бы это было достижимо с помощью функций панд?
# gb returns a DataFrameGroupedBy object, grouped by ID
gb = df.groupby(['id'])
# Create the resulting df
cycletime = pd.DataFrame(columns=['id','timeDeltaMin'])
def calculate_delta():
for id, groupdf in gb:
time = groupdf.timestamp
# returns timestamp rows for the current id
time_delta = time.max() - time.min()
# convert Timedelta object to minutes
time_delta = time_delta / pd.Timedelta(minutes=1)
# insert result to cycletime df
cycletime.loc[-1] = [id,time_delta]
cycletime.index += 1
Подумываете попробовать следующее:
- Многопроцессорная