Pandas.dt.round随机取整最近的一个小时



我有一个带有3个时间戳的变量。

a = DatetimeIndex(['2016-01-26 20:30:00', '2016-01-26 21:30:00','2016-01-26 22:30:00'],
dtype='datetime64[ns]', freq='H')

我现在已经了解到,舍入函数根据以下规则进行舍入:"当在两个整数中间时,选择偶数整数。">

a.round('H')
DatetimeIndex(['2016-01-26 20:00:00', '2016-01-26 22:00:00','2016-01-26 22:00:00'],
dtype='datetime64[ns]', freq=None)

我如何确保它将所有30分钟的时间戳(例如20:30、19:30(四舍五入到下一个小时。

谢谢!

编辑:

我已经尝试了Pandas时间戳30秒不一致的以下功能

def half_up_minute(x):
m = (x - x.floor('H')).total_seconds() < 30   # Round True Down, False Up
return x.where(m).floor('H').fillna(x.ceil('H'))

但是得到以下错误:

TypeError: 'value' must be a scalar, passed: DatetimeIndex

您可以将替换fillna系列的函数更改为Index.where中的第二个参数,并通过30 Minutes:进行比较

def half_up_minute(x):
m = (x - x.floor('H')).total_seconds() < 30 * 60   
return x.floor('H').where(m, x.ceil('H'))
print (half_up_minute(a))
DatetimeIndex(['2016-01-26 21:00:00', '2016-01-26 22:00:00',
'2016-01-26 23:00:00'],
dtype='datetime64[ns]', freq=None)   

a = pd.date_range('2016-01-26 20:30:00', periods=20, freq='10T')
print (a)
DatetimeIndex(['2016-01-26 20:30:00', '2016-01-26 20:40:00',
'2016-01-26 20:50:00', '2016-01-26 21:00:00',
'2016-01-26 21:10:00', '2016-01-26 21:20:00',
'2016-01-26 21:30:00', '2016-01-26 21:40:00',
'2016-01-26 21:50:00', '2016-01-26 22:00:00',
'2016-01-26 22:10:00', '2016-01-26 22:20:00',
'2016-01-26 22:30:00', '2016-01-26 22:40:00',
'2016-01-26 22:50:00', '2016-01-26 23:00:00',
'2016-01-26 23:10:00', '2016-01-26 23:20:00',
'2016-01-26 23:30:00', '2016-01-26 23:40:00'],
dtype='datetime64[ns]', freq='10T')
def half_up_minute(x):
m = (x - x.floor('H')).total_seconds() < 30 * 60   
return x.floor('H').where(m, x.ceil('H'))
print (half_up_minute(a))
DatetimeIndex(['2016-01-26 21:00:00', '2016-01-26 21:00:00',
'2016-01-26 21:00:00', '2016-01-26 21:00:00',
'2016-01-26 21:00:00', '2016-01-26 21:00:00',
'2016-01-26 22:00:00', '2016-01-26 22:00:00',
'2016-01-26 22:00:00', '2016-01-26 22:00:00',
'2016-01-26 22:00:00', '2016-01-26 22:00:00',
'2016-01-26 23:00:00', '2016-01-26 23:00:00',
'2016-01-26 23:00:00', '2016-01-26 23:00:00',
'2016-01-26 23:00:00', '2016-01-26 23:00:00',
'2016-01-27 00:00:00', '2016-01-27 00:00:00'],
dtype='datetime64[ns]', freq=None)

最新更新