2016-09-23 11 views
2

我可以在大熊猫创造日柱的一小时如下:数据框中列显示半小时一班

data['hod'] = [r.hour for r in data.index] 

这让我很容易地检查基础上一天的时间对我的数据统计。我怎样才能创建一个类似的列显示每半小时?

实施例的数据:

     Low High Open hod 
Timestamp    
2014-03-04 09:30:00 1783.50 1786.75 1783.50 9 
2014-03-04 09:45:00 1784.50 1788.75 1784.50 9 
2014-03-04 10:00:00 1785.75 1789.50 1788.25 10 
2014-03-04 10:15:00 1787.75 1789.50 1788.50 10 
2014-03-04 10:30:00 1788.25 1791.25 1789.00 10 
... ... ... ... ... 
2016-06-10 15:00:00 2079.50 2082.00 2082.00 15 
2016-06-10 15:15:00 2079.50 2083.00 2079.75 15 
2016-06-10 15:30:00 2082.50 2084.25 2082.75 15 
2016-06-10 15:45:00 2083.50 2088.25 2083.50 15 
2016-06-10 16:00:00 2085.75 2088.25 2086.25 16 

希望的输出。

我想一个新列“hod2”显示,每半小时时间如下:

     Low High Open hod2 
Timestamp    
2014-03-04 09:30:00 1783.50 1786.75 1783.50 9:30 
2014-03-04 09:45:00 1784.50 1788.75 1784.50 9:30 
2014-03-04 10:00:00 1785.75 1789.50 1788.25 10:00 
2014-03-04 10:15:00 1787.75 1789.50 1788.50 10:00 
2014-03-04 10:30:00 1788.25 1791.25 1789.00 10:30 
+2

没有必要使用理解:'数据[ 'HOD'] = data.index.hour'也可以工作,读起来更容易。 –

回答

2

因为你的指数是一个DatetimeIndex,它有我们可以访问像hour某些属性。您可能会发现对您的任务有用的另一个属性是minute。像这样的东西应该用于显示半小时增量。

data['hod2'] = ['{0}:{1}'.format(r.hour, '30' if round(float(r.minute)/60) == 1 else '00') for r in data.index] 

EDIT

更清洁的这个版本是由Alberto Garcia-Raboso在下面的评论建议:

data['hod2'] = ['{}:{:02d}'.format(r.hour, (r.minute//30)*30) for r in data.index] 
+1

很好地谢谢 – ade1e

+2

微小变化:'['{}:{:02d}'.format(r.hour,(r.minute // 30)* 30)for dataindex]'' –