Skip to content

Commit 9dcb113

Browse files
author
Chang She
committed
ENH: normalize for asfreq #2137
1 parent 8d277e3 commit 9dcb113

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

RELEASE.rst

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ pandas 0.10.0
5050
the number of observed key-tuples is much smaller than the total possible
5151
number that could occur (#2278). Also improves performance in most cases.
5252
- Support duplicate columns in DataFrame.from_records (#2179)
53+
- Add ``normalize`` option to Series/DataFrame.asfreq (#2137)
5354

5455
**Bug fixes**
5556

pandas/core/generic.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def groupby(self, by=None, axis=0, level=None, as_index=True, sort=True,
135135
return groupby(self, by, axis=axis, level=level, as_index=as_index,
136136
sort=sort, group_keys=group_keys)
137137

138-
def asfreq(self, freq, method=None, how=None):
138+
def asfreq(self, freq, method=None, how=None, normalize=False):
139139
"""
140140
Convert all TimeSeries inside to specified frequency using DateOffset
141141
objects. Optionally provide fill method to pad/backfill missing values.
@@ -149,13 +149,16 @@ def asfreq(self, freq, method=None, how=None):
149149
backfill / bfill: use NEXT valid observation to fill methdo
150150
how : {'start', 'end'}, default end
151151
For PeriodIndex only, see PeriodIndex.asfreq
152+
normalize : bool, default False
153+
Whether to reset output index to midnight
152154
153155
Returns
154156
-------
155157
converted : type of caller
156158
"""
157159
from pandas.tseries.resample import asfreq
158-
return asfreq(self, freq, method=method, how=how)
160+
return asfreq(self, freq, method=method, how=how,
161+
normalize=normalize)
159162

160163
def at_time(self, time, asof=False):
161164
"""

pandas/tseries/resample.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def _adjust_dates_anchored(first, last, offset, closed='right', base=0):
340340
Timestamp(lresult, tz=last.tz))
341341

342342

343-
def asfreq(obj, freq, method=None, how=None):
343+
def asfreq(obj, freq, method=None, how=None, normalize=False):
344344
"""
345345
Utility frequency conversion method for Series/DataFrame
346346
"""
@@ -359,4 +359,7 @@ def asfreq(obj, freq, method=None, how=None):
359359
if len(obj.index) == 0:
360360
return obj.copy()
361361
dti = date_range(obj.index[0], obj.index[-1], freq=freq)
362-
return obj.reindex(dti, method=method)
362+
rs = obj.reindex(dti, method=method)
363+
if normalize:
364+
rs.index = rs.index.normalize()
365+
return rs

pandas/tseries/tests/test_timeseries.py

+20
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,26 @@ def test_promote_datetime_date(self):
758758
expected = rng.get_indexer(ts_slice.index)
759759
self.assert_(np.array_equal(result, expected))
760760

761+
def test_asfreq_normalize(self):
762+
rng = date_range('1/1/2000 09:30', periods=20)
763+
norm = date_range('1/1/2000', periods=20)
764+
vals = np.random.randn(20)
765+
ts = Series(vals, index=rng)
766+
767+
result = ts.asfreq('D', normalize=True)
768+
norm = date_range('1/1/2000', periods=20)
769+
expected = Series(vals, index=norm)
770+
771+
assert_series_equal(result, expected)
772+
773+
vals = np.random.randn(20, 3)
774+
ts = DataFrame(vals, index=rng)
775+
776+
result = ts.asfreq('D', normalize=True)
777+
expected = DataFrame(vals, index=norm)
778+
779+
assert_frame_equal(result, expected)
780+
761781
def test_date_range_gen_error(self):
762782
rng = date_range('1/1/2000 00:00', '1/1/2000 00:18', freq='5min')
763783
self.assertEquals(len(rng), 4)

0 commit comments

Comments
 (0)