Python Pandas.dt.round随机循环最近的一小时?

Python Pandas.dt.round随机循环最近的一小时?,python,pandas,datetime,timestamp,Python,Pandas,Datetime,Timestamp,我有一个带有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') 我现在了解到,舍入函数是根据这些规则进行舍入的,“当两个整数中间选择偶数整数。” 如何确保将所有30分钟的时间戳(例如20:30、19:30)循环到下一个小时 谢谢 编辑: 我已从中尝试了以下函数

我有一个带有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')
我现在了解到,舍入函数是根据这些规则进行舍入的,“当两个整数中间选择偶数整数。”

如何确保将所有30分钟的时间戳(例如20:30、19:30)循环到下一个小时

谢谢

编辑:

我已从中尝试了以下函数

def半小时(x):
m=(x-x.floor('H'))。总秒数(<30)四舍五入真向下,假向上
返回x.where(m).楼层('H')。填充(x.ceil('H'))
但会出现以下错误:


TypeError:“value”必须是一个标量,已传递:DatetimeIndex

您可以将replace
fillna
系列的函数更改为中的第二个参数,并按
30分钟进行比较:

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)   
def半小时(x):
m=(x-x.floor('H'))。总秒数(<30*60
返回x层('H')。其中(m,x层('H'))
打印(半分钟(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.日期范围('2016-01-26 20:30:00',周期=20,频率=10T')
印刷品(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半小时(x):
m=(x-x.floor('H'))。总秒数(<30*60
返回x层('H')。其中(m,x层('H'))
打印(半分钟(a))
日期时间索引(['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)

答案是关于
30S
,但我认为这是和这里一样的问题。该函数对我不起作用。我得到一个错误:
AttributeError:'DatetimeIndex'对象没有属性'dt
当我删除
.dt
时,我得到以下错误:
TypeError:'value'必须是一个标量,已传递:DatetimeIndex
仅删除
.dt
好,我将测试它。预期输出为
21,22,23
?@jezrael是的,是
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'))
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)