2016-09-23 36 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]'' –