Skip to content

Commit c5421d0

Browse files
author
Chang She
committed
Add fields from DatetimeIndex to Timestamp. GH #1115
1 parent 5fafeba commit c5421d0

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

doc/source/indexing.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ and thus offers performance that is a good deal faster than indexing.
295295
timeit arr[indexer]
296296
timeit arr.take(indexer, axis=0)
297297

298+
ser = Series(arr[:, 0])
299+
timeit ser.ix[indexer]
300+
timeit ser.take(indexer)
301+
298302
Duplicate Data
299303
~~~~~~~~~~~~~~
300304

pandas/src/datetime.pyx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,27 @@ class Timestamp(_Timestamp):
108108

109109
return Period(self, freq=freq)
110110

111+
@property
112+
def dayofweek(self):
113+
return self.weekday()
114+
115+
@property
116+
def dayofyear(self):
117+
return self.day
118+
119+
@property
120+
def week(self):
121+
return self._get_field('woy')
122+
123+
weekofyear = week
124+
125+
@property
126+
def quarter(self):
127+
return self._get_field('q')
128+
129+
@property
130+
def freqstr(self):
131+
return getattr(self.offset, 'freqstr', self.offset)
111132

112133
cdef inline bint is_timestamp(object o):
113134
return isinstance(o, Timestamp)
@@ -188,6 +209,10 @@ cdef class _Timestamp(datetime):
188209
else:
189210
return datetime.__sub__(self, other)
190211

212+
def _get_field(self, field):
213+
out = fast_field_accessor(np.array([self.value]), field)
214+
return out[0]
215+
191216
# lightweight C object to hold datetime & int64 pair
192217
cdef class _TSObject:
193218
cdef:

pandas/tseries/tests/test_timeseries.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,20 @@ def test_to_period(self):
524524
pts = ts.to_period('M')
525525
self.assert_(pts.index.equals(exp.index.asfreq('M')))
526526

527+
def test_timestamp_fields(self):
528+
# extra fields from DatetimeIndex like quarter and week
529+
from pandas._tseries import Timestamp
530+
idx = tm.makeDateIndex(10)
531+
532+
fields = ['dayofweek', 'dayofyear', 'week', 'weekofyear', 'quarter']
533+
for f in fields:
534+
expected = getattr(idx, f)[0]
535+
result = getattr(Timestamp(idx[0]), f)
536+
self.assertEqual(result, expected)
537+
538+
self.assertEqual(idx.freq, Timestamp(idx[0], idx.freq).freq)
539+
self.assertEqual(idx.freqstr, Timestamp(idx[0], idx.freq).freqstr)
540+
527541

528542
def _simple_ts(start, end, freq='D'):
529543
rng = date_range(start, end, freq=freq)

0 commit comments

Comments
 (0)