Python改变小时 - 分钟到小时结束格式

时间:2018-05-26 16:30:42

标签: python python-3.x pandas datetime

我有一个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')

1 个答案:

答案 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