Skip to content

Commit 04437c3

Browse files
committed
added private methods for pre and post processing
1 parent 95e5989 commit 04437c3

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

pandas/tools/tile.py

+38-21
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,14 @@ def cut(x, bins, right=True, labels=None, retbins=False, precision=3,
119119
if (np.diff(bins) < 0).any():
120120
raise ValueError('bins must increase monotonically.')
121121

122-
return _bins_to_cuts(x, bins, right=right, labels=labels,
123-
retbins=retbins, precision=precision,
124-
include_lowest=include_lowest, dtype=dtype)
122+
x_is_series, series_index, name, x = _preprocess_for_cut(x)
123+
124+
fac, bins = _bins_to_cuts(x, bins, right=right, labels=labels,
125+
retbins=retbins, precision=precision,
126+
include_lowest=include_lowest, dtype=dtype)
127+
128+
return _postprocess_for_cut(fac, bins, retbins, x_is_series,
129+
series_index, name)
125130

126131

127132
def qcut(x, q, labels=None, retbins=False, precision=3):
@@ -173,28 +178,24 @@ def qcut(x, q, labels=None, retbins=False, precision=3):
173178
"""
174179
original, x, dtype = _coerce_to_type(x)
175180

181+
x_is_series, series_index, name, x = _preprocess_for_cut(x)
182+
176183
if is_integer(q):
177184
quantiles = np.linspace(0, 1, q + 1)
178185
else:
179186
quantiles = q
180187
bins = algos.quantile(x, quantiles)
181-
return _bins_to_cuts(x, bins, labels=labels, retbins=retbins,
182-
precision=precision, include_lowest=True,
183-
dtype=dtype)
188+
fac, bins = _bins_to_cuts(x, bins, labels=labels, retbins=retbins,
189+
precision=precision, include_lowest=True,
190+
dtype=dtype)
191+
192+
return _postprocess_for_cut(fac, bins, retbins, x_is_series,
193+
series_index, name)
184194

185195

186196
def _bins_to_cuts(x, bins, right=True, labels=None, retbins=False,
187197
precision=3, name=None, include_lowest=False,
188198
dtype=None):
189-
x_is_series = isinstance(x, Series)
190-
series_index = None
191-
192-
if x_is_series:
193-
series_index = x.index
194-
if name is None:
195-
name = x.name
196-
197-
x = np.asarray(x)
198199

199200
side = 'left' if right else 'right'
200201
ids = bins.searchsorted(x, side=side)
@@ -239,12 +240,6 @@ def _bins_to_cuts(x, bins, right=True, labels=None, retbins=False,
239240
fac = fac.astype(np.float64)
240241
np.putmask(fac, na_mask, np.nan)
241242

242-
if x_is_series:
243-
fac = Series(fac, index=series_index, name=name)
244-
245-
if not retbins:
246-
return fac
247-
248243
return fac, bins
249244

250245

@@ -327,3 +322,25 @@ def _coerce_to_type(x):
327322
x = x.view(np.int64)
328323
dtype = np.datetime64
329324
return original, x, dtype
325+
326+
327+
def _preprocess_for_cut(x):
328+
x_is_series = isinstance(x, Series)
329+
series_index = None
330+
331+
name = None
332+
if x_is_series:
333+
series_index = x.index
334+
if name is None:
335+
name = x.name
336+
return x_is_series, series_index, name, x
337+
338+
339+
def _postprocess_for_cut(fac, bins, retbins, x_is_series, series_index, name):
340+
if x_is_series:
341+
fac = Series(fac, index=series_index, name=name)
342+
343+
if not retbins:
344+
return fac
345+
346+
return fac, bins

0 commit comments

Comments
 (0)