Python Pandas.dt.round随机循环最近的一小时?
我有一个带有3个时间戳的变量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)循环到下一个小时 谢谢 编辑: 我已从中尝试了以下函数
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
您可以将replacefillna
系列的函数更改为中的第二个参数,并按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)