我有一个pandas数据框:
df
DateTime Qty
1/1/2018 0:00 0.6
1/1/2018 0:15 0.6
1/1/2018 0:30 0.4
1/1/2018 0:45 0.5
1/1/2018 1:00 1.0
1/1/2018 1:15 0.2
1/1/2018 1:30 0.2
1/1/2018 1:45 0.5
1/1/2018 1:45 0.0
1/1/2018 2:00 0.3
我想将上面的数据更改为:
df
DateTime Qty DateTime2
1/1/2018 0:00 0.6 1/1/2018 0:00
1/1/2018 0:15 0.6 1/1/2018 1:00
1/1/2018 0:30 0.4 1/1/2018 1:00
1/1/2018 0:45 0.5 1/1/2018 1:00
1/1/2018 1:00 1.0 1/1/2018 1:00
1/1/2018 1:15 0.2 1/1/2018 2:00
1/1/2018 1:30 0.2 1/1/2018 2:00
1/1/2018 1:45 0.5 1/1/2018 2:00
1/1/2018 1:45 0.0 1/1/2018 2:00
1/1/2018 2:00 0.3 1/1/2018 2:00
有没有pythonic方式这样做。我的解决方案是获取分钟,当它大于15时,在日期时间小时增加一小时
我的解决方案:
df['hrAdder'] = np.where(pd.DatetimeIndex(df['DateTime2'].values).minute >= 15., 1, 0)
df['DateTime3'] = df['DateTime2'] + pd.to_timedelta(df['hrAdder'], unit='h')
答案 0 :(得分:2)
<强> 设置 强>
df['DateTime'] = pd.to_datetime(df.DateTime)
df['DateTime2'] = df.DateTime
condition = df.DateTime2.dt.minute >= 15
使用 dt.ceil
loc
df.loc[condition, 'DateTime2'] = df[condition].DateTime2.dt.ceil(freq='H')
# Result
DateTime Qty DateTime2
0 2018-01-01 00:00:00 0.6 2018-01-01 00:00:00
1 2018-01-01 00:15:00 0.6 2018-01-01 01:00:00
2 2018-01-01 00:30:00 0.4 2018-01-01 01:00:00
3 2018-01-01 00:45:00 0.5 2018-01-01 01:00:00
4 2018-01-01 01:00:00 1.0 2018-01-01 01:00:00
5 2018-01-01 01:15:00 0.2 2018-01-01 02:00:00
6 2018-01-01 01:30:00 0.2 2018-01-01 02:00:00
7 2018-01-01 01:45:00 0.5 2018-01-01 02:00:00
8 2018-01-01 01:45:00 0.0 2018-01-01 02:00:00
9 2018-01-01 02:00:00 0.3 2018-01-01 02:00:00