2017-10-06 21 views
0

我一直在使用熊貓一段時間,我敢肯定這是一個愚蠢的問題。使用datetime.time進行比較和創建列

我需要在數據框中創建一個條件爲datetime.time的列。如果datetime.time < 12,用'morning'填充列,然後同樣的過程到'下午'和'晚上'。

import datetime 

b['time'] = ['01-01-2000 10:00:00', '01-01-2000 15:00:00', '01-01-2000 21:00:00'] 

b['time'].dt.time 

(output) 
1 10:00:00 
2 15:00:00 
3 21:00:00 

b['time'].dt.time < 12 #example 

TypeError: can't compare datetime.time to int 

問題是:我無法將datetime.time與int進行比較。我怎樣才能解決這個問題?

非常感謝。

+0

是無法比擬小時?你可以添加數據樣本和所需的輸出? – jezrael

+0

已添加樣本。期望的輸出將會像True/False系列一樣。 – Vini

+0

然後用'b ['time']。dt.hour <12' – jezrael

回答

0

我想你可以通過箱使用標籤cutnumpy.searchsorted

rng = pd.date_range('2017-04-03', periods=24, freq='H') 
df = pd.DataFrame({'Date': rng}) 

bins = [0, 5, 13, 17, 25] 
labels = ['Morning','Afternoon','Evening','Night'] 
hours = df['Date'].dt.hour 
df['bin'] = pd.cut(hours-5+24 *(hours<5),bins=bins,labels=labels,right=False) 

bins = [-1,4,9,17,21] 
labels = ['Night', 'Morning','Afternoon','Evening','Night'] 
df['bin1'] = np.array(labels)[np.array(bins).searchsorted(hours)-1]      
print (df) 
        Date  bin  bin1 
0 2017-04-03 00:00:00  Night  Night 
1 2017-04-03 01:00:00  Night  Night 
2 2017-04-03 02:00:00  Night  Night 
3 2017-04-03 03:00:00  Night  Night 
4 2017-04-03 04:00:00  Night  Night 
5 2017-04-03 05:00:00 Morning Morning 
6 2017-04-03 06:00:00 Morning Morning 
7 2017-04-03 07:00:00 Morning Morning 
8 2017-04-03 08:00:00 Morning Morning 
9 2017-04-03 09:00:00 Morning Morning 
10 2017-04-03 10:00:00 Afternoon Afternoon 
11 2017-04-03 11:00:00 Afternoon Afternoon 
12 2017-04-03 12:00:00 Afternoon Afternoon 
13 2017-04-03 13:00:00 Afternoon Afternoon 
14 2017-04-03 14:00:00 Afternoon Afternoon 
15 2017-04-03 15:00:00 Afternoon Afternoon 
16 2017-04-03 16:00:00 Afternoon Afternoon 
17 2017-04-03 17:00:00 Afternoon Afternoon 
18 2017-04-03 18:00:00 Evening Evening 
19 2017-04-03 19:00:00 Evening Evening 
20 2017-04-03 20:00:00 Evening Evening 
21 2017-04-03 21:00:00 Evening Evening 
22 2017-04-03 22:00:00  Night  Night 
23 2017-04-03 23:00:00  Night  Night