Добавление минут к метке времени в python

1

У меня есть DataFrame df с 2000 строк. Первые несколько строк выглядят следующим образом: +--------------+----------+--+ | Timestamp | Duration | | +--------------+----------+--+ | 1/5/18 0:23 | 22 | | | 1/5/18 3:34 | 32 | | | 1/5/18 23:48 | 24 | | | 1/6/18 2:26 | 15 | | | 1/6/18 14:13 | 23 | | +--------------+----------+--+ +--------------+----------+--+ | Timestamp | Duration | | +--------------+----------+--+ | 1/5/18 0:23 | 22 | | | 1/5/18 3:34 | 32 | | | 1/5/18 23:48 | 24 | | | 1/6/18 2:26 | 15 | | | 1/6/18 14:13 | 23 | | +--------------+----------+--+

Я хотел бы создать новый столбец C на основе следующих критериев: если Duration> = 20: затем добавьте 20 минут в метку времени. если Duration <20: then null.

Итак, учитывая приведенную выше информацию и данные, новая таблица должна выглядеть так: +--------------+----------+--------------+--+--+ | Timestamp | Duration | C | | | +--------------+----------+--------------+--+--+ | 1/5/18 0:23 | 22 | 1/5/18 0:43 | | | | 1/5/18 3:34 | 32 | 1/5/18 3:54 | | | | 1/5/18 23:48 | 24 | 1/6/18 0:08 | | | | 1/6/18 2:26 | 15 | Null | | | | 1/6/18 14:13 | 23 | 1/6/18 14:33 | | | +--------------+----------+--------------+--+--+ +--------------+----------+--------------+--+--+ | Timestamp | Duration | C | | | +--------------+----------+--------------+--+--+ | 1/5/18 0:23 | 22 | 1/5/18 0:43 | | | | 1/5/18 3:34 | 32 | 1/5/18 3:54 | | | | 1/5/18 23:48 | 24 | 1/6/18 0:08 | | | | 1/6/18 2:26 | 15 | Null | | | | 1/6/18 14:13 | 23 | 1/6/18 14:33 | | | +--------------+----------+--------------+--+--+

Любые идеи о том, как это сделать?

Теги:
pandas
dataframe
datetime

1 ответ

1
Лучший ответ

Это должно сделать небольшая арифметика времени.

df['C'] = pd.to_datetime(df.Timestamp) + pd.to_timedelta(
              np.where(df.Duration > 20, 20, np.nan), unit='m')

df['C']

0   2018-01-05 00:43:00
1   2018-01-05 03:54:00
2   2018-01-06 00:08:00
3                   NaT
4   2018-01-06 14:33:00
Name: C, dtype: datetime64[ns]

Не стесняйтесь форматировать результат по мере необходимости:

df['C'] = df['C'].dt.strftime('%m/%d/%y %H:%M')

Примечание. Если ваши даты начинаются с первого дня, измените код преобразования временной шкалы на

pd.to_datetime(df.Timestamp, dayfirst=True, errors='coerce')

Таким образом, даты обрабатываются надлежащим образом, как день первый.

  • 0
    Спасибо за быстрый ответ! Есть еще одна проблема. Для Duration> = 20, столбец «C» не показывает 20 минут, добавленных к отметке времени, или ноль для случаев, когда Duration <20. Например, в приведенном выше примере первая строка все еще показывает 1/5/18 0:23 вместо 1/5/18 0:43. И 4-й ряд все еще показывает 1/6/18 2:26 вместо нуля.
  • 1
    Это работает сейчас. Спасибо вам большое!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню