我有一个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 | | |
+--------------+----------+--------------+--+--+
关于如何做到这一点的任何想法?
答案 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')
所以日期会被妥善处理,因为这是第一天。