Dataframe列显示半小时间隔

时间:2016-09-23 19:25:27

标签: python pandas

我可以在pandas中创建一个小时的列,如下所示:

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

1 个答案:

答案 0 :(得分: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]

修改

Alberto Garcia-Raboso在下面的评论中提出了一个更清晰的版本:

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