我們可以使用Series.dt.hour訪問:
test = df.groupby(df['pickup_datetime'].dt.hour).sum()
這裏描述的區別的例子:
In [136]: times = pd.to_datetime(['2017-08-01 13:13:13', '2017-08-01 20:20:20'])
In [137]: times
Out[137]: DatetimeIndex(['2017-08-01 13:13:13', '2017-08-01 20:20:20'], dtype='datetime64[ns]', freq=None)
In [138]: type(times)
Out[138]: pandas.core.indexes.datetimes.DatetimeIndex
In [139]: times.hour
Out[139]: Int64Index([13, 20], dtype='int64')
如上圖所示DatetimeIndex
有「直接」 .hour
訪問,但datetime
D型的Series
有.dt.hour
訪問:
In [140]: df = pd.DataFrame({'Date': times})
In [141]: df
Out[141]:
Date
0 2017-08-01 13:13:13
1 2017-08-01 20:20:20
In [142]: type(df.Date)
Out[142]: pandas.core.series.Series
In [143]: df['Date'].dt.hour
Out[143]:
0 13
1 20
Name: Date, dtype: int64
如果我們設置Date
列的索引:
In [146]: df.index = df['Date']
In [147]: df
Out[147]:
Date
Date
2017-08-01 13:13:13 2017-08-01 13:13:13
2017-08-01 20:20:20 2017-08-01 20:20:20
就變成:
In [149]: type(df.index)
Out[149]: pandas.core.indexes.datetimes.DatetimeIndex
,所以我們可以直接訪問它(無.dt
訪問)再次:
In [148]: df.index.hour
Out[148]: Int64Index([13, 20], dtype='int64', name='Date')
這是完美的,謝謝! – madsthaks