У меня есть 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 | | | +--------------+----------+--------------+--+--+
Любые идеи о том, как это сделать?
Это должно сделать небольшая арифметика времени.
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')
Таким образом, даты обрабатываются надлежащим образом, как день первый.