Вычислить разницу во времени между всеми датами в столбце python - PullRequest
1 голос
/ 01 декабря 2019

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

group        date            value
 g_1  1/2/2019 11:03:00        3
 g_1  1/2/2019 11:04:00        5
 g_1  1/2/2019 10:03:32        100
 g_2  4/3/2019 09:11:09        46

Я хочу рассчитать разницу во времени между вхождениями (в секундах) на группу.

Пример вывода:

groups_time_diff = {'g_1': [23,5666,7878], 'g_2: [0.2,56,2343] ,...}

Это мой код:

groups_time_diff = defaultdict(list)
for group in tqdm(groups):
    group_df = unit_df[unit_df['group'] == group]    
    dates = list(group_df['time'])
    while len(dates) != 0:
        min_date = min(dates)
        dates.remove(min_date)
        if len(dates) > 0:
            second_min_date = min(dates)
            date_diff = second_min_date - min_date
            groups_time_diff[group].append(date_diff.seconds)

Это выполняется вечно, и я ищу более эффективный способ получить желаемый результат. Есть идеи?

Ответы [ 2 ]

1 голос
/ 02 декабря 2019

Попробуйте это:

sorted_group_df = group_df.sort_values(by='time',ascending=True)
dates = sorted_group_df['time']
one = dates[1:-1].reset_index(drop=True)
two = dates[0:-1].reset_index(drop=True)
date_difference = one - two
date_difference_in_seconds = date_difference.dt.seconds
1 голос
/ 01 декабря 2019

Попробуйте сначала отсортировать даты. Затем вычтите эти две серии:

dates = dates.sort_values()
pd.Series.subtract(dates[0:-1], dates[1:-1])

Вы используете функцию min дважды в каждой итерации, которая неэффективна. Надеюсь, это поможет.

...