在python中添加分钟到时间戳

时间:2018-06-19 07:11:28

标签: python pandas datetime dataframe

我有一个2000行的DataFrame df。前几行如下所示: +--------------+----------+--+ | 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: if Duration> = 20:然后在时间戳上添加20分钟。 如果持续时间< 20:然后为空。

因此,鉴于上述信息和数据,新表应如下所示: +--------------+----------+--------------+--+--+ | 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 | | | +--------------+----------+--------------+--+--+

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分: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')

注意:如果您的日期以dayfirst开头,请将时间戳转换代码更改为

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

所以日期会被妥善处理,因为这是第一天。